我想从大量数据文件中获取一些统计信息,这些数据文件都位于自己的文件夹中。使用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>
答案 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