2017-09-26 11 views
0

私はこの複雑なtxtファイルをデータブロックで読み取って、それをcsvファイルとしてPythonに保存するにはどうすればよいですか?

++++++++++++++ 
Country 1 

**this sentence is not important. 
**date 25.09.2017, also not important 
******* 
Address 
**Office 

     Address A, 100 City. Country X 
**work time 09h00-16h00<br>9h00-14h00 
**www.example.com 
**[email protected]; 
**012/345 67 89 
**téléfax 123/456 67 89 
******* 
Address 
**Home Office 

     Address A, 200 City. Country X 
**[email protected]; 
**001/000 00 00 
**téléfax 111/111 11 11 
******* 
Address 
**Living address 

     Address 0, 123 City 
**[email protected] 
**000/000 00 00 
**téléfax 222/222 22 22 
++++++++++++++ 
Country 2 

**this sentence is not important. 
**date 25.09.2017, also not important 
******* 
Address 
**Office 

     AAA 11, 30 City 

     BBB 22, 30 City 
**work time 08h00-12h30 
**www.example.com 
**[email protected] 
**000/000 00 00 
**téléfax 111/11 11 11 
******* 

ETC 

のように構成ファイルを持っていると私は、これらの列をCSVファイルにデータを入れたい場合は:

Country (Line right after ++++++++++++++), Address (Line right after *******), Office (after **), WorkTime (after **), Website (after **), Email (after **), Phone (after **), Fax (after **) 

私はPythonでそれをどのように行うのですか?問題は、いくつかのリストに欠けているデータがあるので、私はcsvファイルのいくつかの行がすべて台無しになることを知っていますが、私はこれを行った後にデータベースを微調整するいくつかの手動作業をしても構いません。別の問題は、国名が異なるため、私は区切り記号として++++++++++++++を使用する必要があるということです。

私はこの

import csv 
with open('listofdata.txt', 'r') as FILE: 
    DATA = FILE.read() 

LIST = DATA.split('++++++++++++++') 

LIST2 = [] 
LIST3 = [] 
LIST4 = [] 

for ITEMS in LIST: 
    LIST2 = ITEMS.split('*******')  
    for items2 in LIST2: 
     LIST3 = items2.split('**') 
     LIST4.append(LIST3) 


with open('file.csv', 'w') as CSV: 
    for ITEMS in LIST4: 
     csv.write(ITEMS) 

のようなものを試してみました。しかし、それは動作しません。

ERROR: `トレースバック(最後の最新の呼び出し): ファイル "test.py"、22行目、 csv.write(ITEMS)で はAttributeError: 'モジュール' オブジェクトが属性を持っていない '書き込み'

`

答えて

1

最後の行では、 "CSV"の代わりにファイルオブジェクト "csv"を書きました。これがエラーの原因でした。

私は、あなたのコードにpython内のcsvモジュールを使用する方法についての手順を追加しました。

あなたがしなければならないのは、あなたの解析方法の作業です。

コード:

import csv 
with open('listofdata.txt', 'r') as FILE: 
    DATA = FILE.read() 

LIST = DATA.split('++++++++++++++') 

LIST2 = [] 
LIST3 = [] 
LIST4 = [] 

for ITEMS in LIST: 
    LIST2 = ITEMS.split('*******') 
    for items2 in LIST2: 
     LIST3 = items2.split('**') 
     LIST4.append(LIST3) 

with open('file.csv', 'w') as csvfile: 
    spamwriter = csv.writer(csvfile, delimiter=',') 
    for ITEMS in LIST4: 
     spamwriter.writerow(ITEMS) 

出力:

"" 

" 
Country 1 

","this sentence is not important. 
","date 25.09.2017, also not important 
" 

" 
Address 
","Office 

     Address A, 100 City. Country X 
","work time 09h00-16h00<br>9h00-14h00 
","www.example.com 
","[email protected]; 
","012/345 67 89 
","téléfax 123/456 67 89 
" 

" 
Address 
","Home Office 

     Address A, 200 City. Country X 
","[email protected]; 
","001/000 00 00 
","téléfax 111/111 11 11 
" 

" 
Address 
","Living address 

     Address 0, 123 City 
","[email protected] 
","000/000 00 00 
","téléfax 222/222 22 22 
" 

" 
Country 2 

","this sentence is not important. 
","date 25.09.2017, also not important 
" 

" 
Address 
","Office 

     AAA 11, 30 City 

     BBB 22, 30 City 
","work time 08h00-12h30 
","www.example.com 
","[email protected] 
","000/000 00 00 
","téléfax 111/11 11 11 
" 

" 
" 
+0

おかげでたくさんの仲間!上のルールを使用してCSVを書く方法を理解するだけです:国、住所、オフィス、労働時間、ウェブサイト、電子メール、電話、FAX – CsharpNoob

0

csvファイルに保存すると、csv.writerが使用されます。しかし、最初にあなたのlistofdata.txtファイルの構造のためのパーサを準備してから、データをcsvファイルに保存する必要があります。

csv.DictWriterを使用することもできますが、まずパーサーを準備する必要があります。

関連する問題