"Konsultan +" - sistem referensi untuk pengacara, akuntan, dan sebagainya. Ini bekerja secara stabil seperti jam tangan. Dalam posting ini, disarankan agar Anda mengatur jam ini sedikit untuk kebutuhan Anda dalam hal output teks, yaitu: lihat bagaimana Anda dapat memproses informasi teks yang diberikan sistem dengan python. Sepanjang jalan, bekerja dengan elemen teks yang dinyatakan dalam judul.
Naungan di pagar
Sebagai seorang pengacara yang telah bekerja dengan program bantuan "Konsultan +" untuk waktu yang lama, saya selalu kekurangan fungsi yang biasa dalam sistem ini. Fungsi ini adalah sebagai berikut. Saat ada perubahan yang muncul dalam tindakan pengaturan, karyawan K + memposting ikhtisar perubahan dalam bentuk dua kolom teks:

Kolom di sebelah kiri adalah seperti sebelumnya, kolom di sebelah kanan adalah norma yang sekarang berlaku. Sekarang (beberapa tahun yang lalu), fungsionalitas telah diperbarui dan perubahan disorot
dalam huruf tebal dan langsung terlihat. Ini semua sangat nyaman. Tetapi ada hal-hal yang tidak nyaman.
Pertama, beberapa norma tidak diberikan, karena volumenya terlalu besar untuk karyawan K + dan Anda harus pergi ke tautan sistem, dan kedua, Anda tidak bisa hanya mengambil dan menyalin dua kolom ini dengan menempelkannya ke excel atau tabel kata biasa.
Mungkin ini dilakukan dengan sengaja agar pengguna bekerja lebih aktif dengan sistem, termasuk tidak mentransfer apa pun dari sana.
Nah harus memperbaikinya.
Tugas : untuk menyebarkan teks dalam dua kolom, di mana dimungkinkan dan di mana tidak - hanya menghapus norma dan memasukkan semua ini ke dalam lembar kerja Excel. Pada saat yang sama, mari kita lihat bagaimana Anda dapat mengubah font, perataan dan hal-hal sepele lainnya dalam teks menggunakan python.
Untuk contoh yang memberi makan program kami di masa depan, kami mengambil dari K + perubahan pada Hukum "Di JSC". Undang-undang ini sering diubah, jadi akan ada pekerjaan yang harus dilakukan.
Simpan perubahan ke file txt biasa (misalnya, edisi .txt). Anda mendapatkan sesuatu seperti berikut:

Jadi, jelas bahwa setiap perubahan dipisahkan dari yang lain dengan garis yang solid, yang setelah disimpan berupa banyak "???". Ada juga perubahan pos yang harus diperhitungkan. Semuanya terlihat sederhana kecuali untuk poin-poin tertentu.
Jadi, temui perubahan yang memiliki bentuk berikut:

Selain itu, masalah ini diperparah oleh fakta bahwa perubahan individu berbeda secara signifikan panjangnya.
Kami melanjutkan ke K +.
Buat file Consult.py baru dan tambahkan baris pertama ke dalamnya:
from __future__ import unicode_literals import codecs import openpyxl
Modul openpyxl sudah akrab, memungkinkan Anda untuk bekerja dengan Excel, tetapi dua lainnya baru. Fungsinya untuk memproses karakter Rusia dengan benar, yang sering salah dibaca oleh program.
Di muka, buat file excel kosong baru di luar program, beri nama misalnya revision2.xlsx. Kami akan membuka file ini dengan program kami dan menulis data di sana. Ini akan menjadi file terakhir kami.
Jadi, program membuka file excel, memasukkannya:
wb = openpyxl.load_workbook('2.xlsx') sheet=wb.get_active_sheet() x=1 y=0 test=[] test2=[] test3=[]
Juga di atas kami membuat 3 daftar kosong di mana kami akan mengumpulkan data: test, test2, test3.
Selanjutnya, dalam variabel 'a' kita akan meletakkan segala sesuatu yang dapat jatuh ke dalam bentuk nama perubahan. Di y - akan ada garis pemisah. Panjangnya sama:
a=('','','','','','','') y='?????????????????????????????????????????????????????????????????????????'
Sekarang bagian yang menyenangkan.
with open ('.txt',encoding='cp1251') as f: lines = (line.strip() for line in f) for line in lines: if line.startswith(''): continue col1=line[:35] col2=line[39:] col3=line[35:39] if line.startswith(a): sheet.cell(row=x, column=1).value=line
Kami membuka file .txt yang dienkode cp1251. Setiap baris dibersihkan dari spasi dari ujung dan awal dengan metode strip.
Jika baris dimulai dengan kata "tua", kita lewati. Mengapa kita perlu mempertahankan "lama" dan "baru", ini sudah jelas. Selanjutnya, kami membagi baris: dari awal hingga 35 karakter dan dari 39 karakter hingga akhir. Artinya, kita menghilangkan celah di tengah:

Kami menempatkan konten ruang di tengah baris di col3, karena ini mungkin bukan spasi jika perubahan ditulis dalam satu baris berturut-turut:

Selanjutnya, jika baris dimulai dengan tajuk perubahan (kami menulis tajuk ini ke dalam variabel a), maka kami segera menulis baris ini untuk unggul tanpa pemisahan dan menambahkan baris - x + = 1 (atau x = x + 1). Baris kosong, yang kami temui, kami rindu.
Pertimbangkan potongan kode berikut:
if len(col2)==0:
Jika panjang 2 bagian dari string adalah 0, yaitu, tidak ada, maka test2 mendapatkan bagian pertama dari string. Jika ada spasi di garis, tetapi bagian kedua dari garis tidak ada, maka bagian pertama dan kedua dari garis, masing-masing, jatuh ke dalam uji dan uji2.
Jika ada spasi di garis, dan garis tidak kosong dan panjangnya lebih dari 60 karakter, maka ditambahkan ke test3.
Jika baris kosong, artinya, kami melalui seluruh perubahan, lalu kami menulis semua yang kami kumpulkan dalam sel excel, secara bersamaan memeriksa kekosongan dalam pengujian (sehingga tidak kosong) dan panjang test3.
Akhirnya, simpan file excel:
wb.save('2.xlsx')
Gaya, font dan perataan teks dalam python
Tambahkan beberapa keindahan ke meja kami.
Secara khusus, kami akan membuatnya sehingga saat mengeluarkan data, header perubahan disorot dalam huruf tebal, dan teks itu sendiri lebih kecil dan diformat agar mudah dibaca.
Python memungkinkan Anda melakukan ini. Untuk melakukan ini, kita perlu menambahkan dan mengubah kode di tempat-tempat di mana kita mencatat hasil dalam file excel:
from openpyxl.styles import Font, Color,NamedStyle, Alignment
al= Alignment(horizontal="justify", vertical="top") ft = Font(name='Calibri', size=9) ft2 = Font(name='Calibri', size=9,bold=True)
if line.startswith(a): sheet.cell(row=x, column=1).value=line
if line==y:
if len(test3)>0:
Faktanya, kami hanya menambahkan metode .font dan .ignignment yang berlaku.
Seluruh program berbentuk:
Kode from __future__ import unicode_literals import codecs import openpyxl from openpyxl.styles import Font, Color,NamedStyle, Alignment """ 1. Consultant+ , .txt ????????????????????????????????????????????????????????????????????????? 15 1 48 15) 15) excel . word - txt : .txt : 2.xlsx """
Jadi, pada akhirnya, setelah memproses file oleh program, kami memiliki tabel yang cukup baik dengan perubahan dalam hukum:

Program ini dapat diunduh dari tautan - di
sini .
Contoh file untuk diproses oleh program ada di
sini .