2017-07-24 82 views
1

我想读取使用csv库的csv文件。我试图遍历每一行,但转换为大写,然后我尝试使用每行一些有用的功能。阅读CSV文件,并在Python中转换为大写

import csv 
reader = csv.DictReader(open('sample.csv', 'rb')) 
for line in reader: 
    line = line.upper() 
    name = line['Name'] 

上述代码似乎不起作用。当我尝试将读入的行转换为upper时失败。我可以单独将csv文件的每一列更改为较高(使用字典键),但我想避免这种情况,因为字典中有很多键。

+0

你可以发布错误信息吗? – Ding

+1

你使用'csv.DictReader'对象,当你迭代它时,它会返回一个'dict'而不是''tuple',这就是'csv.reader'返回的结果。 'dict'和'tuple'都没有'.upper'方法。你可能想在'dict'的某个内容中调用'.upper'。 –

回答

2

可以预先处理将它们传递之前,使用生成器表达式从文件对象中的每个线,csv.DictReader返回类型的字典的可迭代:

with open('sample.csv', 'rb') as f: 
    header = next(f).strip().split(',') 
    reader = csv.DictReader((l.upper() for l in f), fieldnames=header) 
    for line in reader: 
     name = line['Name'] 

演示:

>>> f = ['a,b', 'c,d'] 
>>> c = csv.DictReader((l.upper() for l in f), fieldnames=('h1', 'h2')) 
>>> list(c) 
[{'h2': 'B', 'h1': 'A'}, {'h2': 'D', 'h1': 'C'}] 
1

您可以使用:

import codes 
txt = 'sampole.csv' 
with codecs.open(txt, 'r', encoding='utf-8') as f: 
    lines = f.readlines() 
    lines = [x.upper() for x in lines] 
lines