【发布时间】:2013-01-28 18:20:44
【问题描述】:
为了设置上下文,我有一个包含 200-300 个文件的目录,每个文件的大小范围(行数)。我粘贴文件并将它们导出到 csv 文件。我想我上次运行它时 csv 文件有超过 340,000 行。最重要的是,前 8 个文件不断被写入,所以有时在解析时会丢失数据。
现在,每个文件都是这样设置的:
DateTime Message Action ActionDetails
我有代码可以浏览所有文件,解析它们,然后输出到 csv 文件:
for infile in listing:
_path2 = _path + infile
f = open(_path2, 'r')
labels = ['date', 'message', 'action', 'details']
reader = csv.DictReader(f, labels, delimiter=' ', restkey='rest')
for line in reader:
if line.get('rest'):
line['details'] += ' %s' % (' '.join(line['rest']))
out_file.write(','.join([infile,line['date'], line['message'], line['action'], line['details']]) + '\n')
f.close()
out_file.close()
我想知道复制前 8 个文件的“最佳”方法是什么,这样我在解析时就不会丢失数据。最好的意思是花费最少的时间,因为目前运行 python 脚本的总时间约为 35-45 秒。
【问题讨论】:
-
复制文件并解析副本是否可以接受?
-
我看过
shutil这样的东西,但不太了解它是否知道我想使用它。 -
@thegrinner 我不明白为什么不这样做。解析后文件将被删除,所以可能。
-
前 8 个文件是写在文件的前面还是后面?即使您使用shutil 制作副本,它也最多可能是文件的一部分。如果是这种情况,您最好从文件的正确末尾读取(除非它不断被覆盖)。如果您需要整个文件,您可以放入一些逻辑以查看文件在读取时是否仍在增长,并且仅在停止时完成读取。它还取决于您正在运行的盒子。不幸的是,Windows 上的任何文件复制操作都不是原子操作,因此您可能会在那里遇到问题。
-
@PaulSeeb 文件正在被覆盖。看起来第一个被覆盖,然后是 seoncd,第三个,依此类推。这一切都发生在大约一分钟/分半钟内。
标签: python csv file-io export-to-csv