每周,我需要替换csv文件(具有日期相关名称)中的标头并删除其中两列。我最简单的方法是编写一个带有相关信息的新csv文件(即没有列k和l)。 这就是我的代码的样子:
import csv
import calendar
import datetime
from datetime import date, timedelta
today = date.today()
tuesday = date.today() - timedelta(3)
p = tuesday.strftime('%Y%m%d')
us_csv = 'E:/' + "TEST_us_" + p + ".csv"
HIn = "a, b, c, d, e, f, g, h, k, l"
HOut = "A, B, C, D, E, F, G, H"
fIn= open ('us_csv', 'r')
HeaderIn = fIn.readline()
HeaderOut = HeaderIn.replace(HIn, HOut, 1)
fOut = open ('E:/Abase/usStats.csv', 'w')
fOut.write(HeaderOut + '\n')
for line in fIn
fOut.write(line)
fOut.close
新的csv是空的。我阅读了大部分类似的问题,但我无法弄清楚如何做到这一点。任何帮助将不胜感激。谢谢。
答案 0 :(得分:2)
这对我有用。我喜欢使用writelines
所以我可以立刻完成所有的写作。您可能因为打开了两个文件而遇到麻烦。我不确定。为了安全起见,我总是使用如图所示的块立即打开和关闭文件。
这可能没有必要,但我倾向于将行拆分为值列表,以便我可以进行所需的操作。我正在为我使用csv模块。你可以在这里看到我使用列表拼接来删除每行的最后两列。然后我和他们一起回来。
import os
import argparse
import operator
import csv
def main():
p = argparse.ArgumentParser (description="Removes last two columns and renames headers.")
p.add_argument("origfile", help="Path of original file")
p.add_argument("newfile", help="Path of new file.")
args = p.parse_args()
with open(args.origfile) as f:
raw_rows = f.read().splitlines()
new_header_row = "A,B,C,D,E,F,G,H\n" # Don't put spaces
# for easier manipulation I like to split the row into a list values
# then rejoin them later after I've changed or removed what I needed
rows = csv.reader(raw_rows)
newfile_lines = [new_header_row]
newfile_lines.extend(",".join(row[:-2]) + "\n" for row in rows)
with open(args.newfile, 'w') as f:
f.writelines(newfile_lines)
if __name__ == '__main__':
main()
我跑了这个:
a,b,c,d,e,f,g,h,i,j
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
1,2,3,4,5,6,7,8,9,10
得到了:
A,B,C,D,E,F,G,H
1,2,3,4,5,6,7,8
1,2,3,4,5,6,7,8
1,2,3,4,5,6,7,8
1,2,3,4,5,6,7,8
1,2,3,4,5,6,7,8
1,2,3,4,5,6,7,8
1,2,3,4,5,6,7,8
1,2,3,4,5,6,7,8