2017-07-25 199 views
1

我想寫一個包含字符串的所有行:從一堆文本文件。這是我的代碼:從文本文件寫入CSV文件

import os 
import glob 
import csv 
import re 

#Defining Keyword 
keyword = '2012-07-02' 

#Code to merge all relevant LOG files into one file and insert 
with open('Combined-01022012.txt' , 'w', newline = '') as combined_file: 
    csv_output = csv.writer(combined_file) 
    for filename in glob.glob('FAO_Agg_2012_Part_*.txt'): 
     with open(filename, 'rt', newline = '') as f_input: 
     #with gzip.open((filename.split('.')[0]) + '.gz', 'rt', newline='') as f_input: 
      csv_input = csv.reader(f_input) 
      for row in csv_input: 
       row.insert(0, os.path.basename(filename)) 
       try: 
        if keyword in row[2]: 
         csv_output.writerow(row) 
       #row.insert(0, os.path.basename(filename)) 
       #csv_output.writerow(row) 
       except: 
        continue 
      continue 

一切似乎是正確的,並且代碼運行但沒有寫入我的文本文件。可能會出現什麼問題?

+0

修復您的縮進。 –

+0

您是否嘗試在writerow()調用旁邊添加跟蹤來查看它是否至少到達那裏? 如果你想要更多的幫助,你應該確實修復你的縮進,然後提供小例子文件,這樣我們就可以看到你想要實現的目標 –

回答

2

你的主要問題是在線路:

row.insert(0, os.path.basename(filename)) 
try: 
    if keyword in row[0]: 
     csv_output.writerow(row) 
except: 
    continue 

你基本上將當前文件作爲行的第一個條目的父文件夾的名稱,然後在第二天你行檢查該條目(row[0])是否包含您的keyword。除非父文件夾包含您的keyword2012-07-02),否則該條件永遠不會評估爲True

if keyword in row[0]: 
    csv_output.writerow([os.path.basename(filename)] + row) 

此外,使用空白except是一個非常,非常糟糕的主意:我要爲這個混合起來。如果您想要捕獲特定的例外情況,請在您的except條款中進行定義。