用DictReader读取一行csv文件(基于输入,如果可以的话),然后格式化并写入新文件

时间:2014-12-05 18:10:40

标签: python csv

我正在尝试读入包含许多行和列的csv文件;我想以特定格式将一行打印到文本文件,并对值进行一些散列。到目前为止,我已经能够读取文件,使用DictReader解析它,使用IF语句找到我想要的行,然后打印键和值。我无法弄清楚如何将其格式化为我想要的格式(Key = Value \ n),我无法使用'row'的值来计算如何写入文件(更不用我想要的格式)获得如下。我已经尝试了几天并取得了一些进展,但无法让它发挥作用。以下是我的工作(结果中遗漏了很多细节):


>>>import csv

with open("C:\path_to_script\filename_Brief.csv") as infh:
    reader = csv.DictReader(infh)
    for row in reader:
        if row['ALIAS'] == 'Y4K':
            print(row)

结果输出

{'Full_Name':'Jack Flash','PHONE_NO':'555 555-1212','ALIAS':'Y4K'}


我想让用户输入Alias,然后使用它来确定要打印的行。我已经完成了大量的研究,但我是Python的新手,所以我正在寻求帮助!我使用过pyexcel,xlrd / xlwt,甚至认为我会尝试大熊猫,但要学习太多。我也得到它在一次测试中格式化我想要的方式但是然后无法使行选择工作 - 换句话说,它打印所有记录而不是我想要的行。打开30个Firefox标签试图找到答案!提前谢谢!

1 个答案:

答案 0 :(得分:0)

以下可能至少接近你想要的(我认为):

import csv

with open(r'C:\path_to_script\filename_Brief.csv') as infh, \
     open('new_file.txt', 'wt') as outfh:
    reader = csv.DictReader(infh)
    for row in reader:
        if row['ALIAS'] == 'Y4K':
             outfh.write('Full_Name = {Full_Name}\n'
                         'PHONE_NO = {PHONE_NO}\n'
                         'ALIAS = {ALIAS}\n'.format(**row))

对于每个匹配的row

,这会将3行格式化写入输出文件
Full_Name = Jack Flash 
PHONE_NO = 555 555-1212
ALIAS = Y4K            
BTW,**row符号基本上意味着“获取指定字典中的所有条目并将它们转换为此函数调用的关键字参数”。格式字符串中的{keyword}语法指的是将传递给str.format()方法的任何关键字参数。