使用python将子目录中的许多文本文件中的行写入csv

时间:2017-01-21 22:59:13

标签: python python-2.7 csv

我想从大量数据文件中获取一些统计信息,这些数据文件都位于自己的文件夹中。使用python,我想创建一个单独的csv文件,从相当高级别的根文件夹开始查找数据文件(始终添加新文件夹),并使用每个文件中的一些键值写入一行。

在使用os.walk()方法与writerows()结合使用之前,我已经完成了这项工作,但这次给我带来了问题。当我运行下面的代码时,(在我的D:/ temp /文件夹中有一个名为XY.txt的文件)我收到的错误是:'意外的unindent'在读取{{1 }}

我已经移动了缩进,但只是移动了上面提到的错误。有人可以告诉我如何实现所需的行写作吗?

wr = csv.writer(f,lineterminator='\n',dialect='excel')

我正在设置这些行,因此我可以从.txt文件中提取更多项目,但为了清晰起见,我没有在上面的代码中包含这些项目。

*更新代码以反映答案:现在import csv, os, math fname = 'Output.csv' f = open(fname, 'w') #truncate existing file or generate new one f.write("count>0.7\n") merged_files = list() # look for data files, in sub-folders down from D:/temp for root, dirs, files in os.walk('D:/temp', topdown=False): for name in files: if name.startswith('XY') and name.endswith('.txt'): try: fp = open(root+'/'+name) #create a list for storing relevant data from .txt file csvRows = list() for line in fp: content = line.split() size = float(content[3]) #count lines with value over 0.7 in fourth column if size > 0.7: total1 = total1 + 1 fp.close() finally: csvRows = [total1] merged_files.append(csvRows) # write new row to file. wr = csv.writer(f,lineterminator='\n',dialect='excel') wr.writerows(merged_files) f.close() 序列以try:语句结束,其中finally:循环期间收集的所有信息都写入一行。< / p>

1 个答案:

答案 0 :(得分:0)

尝试尝试运行代码块,如果失败则会运行中的代码块,但除外。无论尝试中的代码是否成功,都会运行一个可选的 finally 子句。

例如,以下代码段中的函数在执行时将返回2

def checktry():
   try: 
       return 1
   finally:
       return 2

我建议使用 except 子句,如果代码失败,会打印出有用的消息。

except Exception as inst:                                                       
    print(inst)

参考:https://docs.python.org/3/tutorial/errors.html#exceptions