替换csv文件中的头文件并使用python 2.7编写选定的列

时间:2015-02-27 20:46:15

标签: python-2.7 csv

每周,我需要替换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是空的。我阅读了大部分类似的问题,但我无法弄清楚如何做到这一点。任何帮助将不胜感激。谢谢。

1 个答案:

答案 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