使用Python进行内嵌CSV文件编辑

我可以使用Python的CSV库或类似的技术来内嵌CSV文件吗?

目前,我正在处理一个文件并更新第一列(名称字段)以更改格式。 我的代码的简化版本如下所示:

with open('tmpEmployeeDatabase-out.csv', 'w') as csvOutput: writer = csv.writer(csvOutput, delimiter=',', quotechar='"') with open('tmpEmployeeDatabase.csv', 'r') as csvFile: reader = csv.reader(csvFile, delimiter=',', quotechar='"') for row in reader: row[0] = row[0].title() writer.writerow(row) 

哲学的作品,但我很好奇,如果我可以做一个内联编辑,以便我不复制该文件。

我已经试过了,但是这会将新logging追加到文件的末尾而不是replace它们。

 with open('tmpEmployeeDatabase.csv', 'r+') as csvFile: reader = csv.reader(csvFile, delimiter=',', quotechar='"') writer = csv.writer(csvFile, delimiter=',', quotechar='"') for row in reader: row[1] = row[1].title() writer.writerow(row) 

不,你不应该试图写你正在阅读的文件。 如果您在阅读完一行后继续seek 可以这样做,但这不可取,特别是如果您要写回的数据超过您阅读的数据。

规范的方法是写入一个新的临时文件,并将其移到您读取的旧文件上。

 from tempfile import NamedTemporaryFile import shutil import csv filename = 'tmpEmployeeDatabase.csv' tempfile = NamedTemporaryFile(delete=False) with open(filename, 'rb') as csvFile, tempfile: reader = csv.reader(csvFile, delimiter=',', quotechar='"') writer = csv.writer(tempfile, delimiter=',', quotechar='"') for row in reader: row[1] = row[1].title() writer.writerow(row) shutil.move(tempfile.name, filename) 

我已经在这里使用了tempfileshutil库来使得任务更容易。

没有底层的系统调用来数据插入到文件中。 你可以覆盖,你可以追加,你可以replace。 但是将数据插入到中间意味着从您进行编辑的点开始读取和重写整个文件。

因此,这样做的两种方法是(a)将整个文件写入内存,在那里进行编辑,然后将结果转储回磁盘,或者(b)打开临时输出文件,在其中编写结果而您读取input文件,然后用新的文件replace旧的文件,一旦你到达最后。 一种方法使用更多的RAM,另一种使用更多的磁盘空间。