<p>在处理输入文件的其余部分之前写入头文件:</p>
<pre><code>from dateutil.parser import parse
import csv
with open('testin.csv', 'r', encoding='utf-8') as inFile, open('testout.csv', 'w', encoding='utf-8') as outFile:
exampleReader = csv.reader(inFile)
header = next(exampleReader)
exampleWriter = csv.writer(outFile)
del header[2] # drop the column from the header
exampleWriter.writerow(header)
for row in exampleReader:
row[0] = parse(row[0]) # converting date format for sqlite
del row[2] # dropping column that is not needed
print('date corrected', row)
exampleWriter.writerow(row)
</code></pre>
<p>我重新安排了一些事情,但是,主要的一点是将头读入带有<code>next()</code>的变量,从头中删除不需要的列,然后将其写入输出文件。然后处理输入文件的其余部分。你知道吗</p>
<p>重要的一点是,输入文件的其余部分在for循环中逐行处理。当您可以对整个文件进行迭代时,不必预先将其读入列表。你知道吗</p>
<p>还可以使用生成器表达式高效地写入行:</p>
<pre><code>from dateutil.parser import parse
import csv
def process_row(row, is_header=False):
if not is_header:
row[0] = parse(row[0])
del row[2]
return row
with open('data', 'r', encoding='utf-8') as inFile, open('testout.csv', 'w', encoding='utf-8') as outFile:
exampleReader = csv.reader(inFile)
header = next(exampleReader)
exampleWriter = csv.writer(outFile)
exampleWriter.writerow(process_row(header, is_header=True))
exampleWriter.writerows(process_row(row) for row in exampleReader)
</code></pre>