Python:\ n在分割csv文件后添加

时间:2014-09-25 10:44:23

标签: python

发现这真的很奇怪,出于某种原因,当我从.csv文件中分割一行时,'\ n'被添加到我列表中的最后一个条目。

脚本

    f = open("temp.csv")
    lines = f.readlines()
    headings = lines[0]
    global heading_list
    heading_list = headings.split(";")
    print headings

我打印出的只是标题本身并没有'\ n',当它结束时,它似乎只是在半结肠处分裂时。

.csv文件

timestamp;%usr;%nice;%sys;%iowait;%steal;%irq;%soft;%guest;%idle
10-20-39;6.53;0.00;4.02;0.00;0.00;0.00;0.00;0.00;89.45
10-20-41;0.50;0.00;1.51;0.00;0.00;0.00;0.00;0.00;97.99
10-20-43;1.98;0.00;1.98;5.45;0.00;0.50;0.00;0.00;90.10
10-20-45;0.50;0.00;1.51;0.00;0.00;0.00;0.00;0.00;97.99
10-20-47;0.50;0.00;1.50;0.00;0.00;0.00;0.00;0.00;98.00
10-20-49;0.50;0.00;1.01;3.02;0.00;0.00;0.00;0.00;95.48

脚本输出

Script Output

2 个答案:

答案 0 :(得分:2)

当您在Python中读取一行时,不会删除行尾字符。您必须手动执行此操作,例如使用line.rstrip("\r\n")。这不是split的问题,而是问readlines

答案 1 :(得分:1)

简短回答 - 使用csv模块。见下文。

新行字符出现在从文件中读取的数据中。 readlines()不会将其删除,事实上您会在headings中找到新的行字符

>>> headings = lines[0]
>>> headings
'timestamp;%usr;%nice;%sys;%iowait;%steal;%irq;%soft;%guest;%idle\n'

更好的方法是对从文件读取的数据使用splitlines()。无论类型如何{<1}},'\n''\r\n'删除新行:

'\r'

>>> with open("temp.csv") as f: >>> lines = f.read().splitlines() >>> headings = lines[0] >>> headings 'timestamp;%usr;%nice;%sys;%iowait;%steal;%irq;%soft;%guest;%idle' 对于Mac换行符(readlines())失败,因此您应该通过将'\r'指定为模式,使用universal newline support打开该文件:

'rU'

另外值得一提的是,如果文件很大,以这种方式处理文件会占用大量内存,因为整个文件都是一次性读取的。相反,迭代文件更有效:

with open('temp.csv', 'rU') as f:
    ...

最后,真正的答案。您可以使用csv模块避免上述所有混乱:

with open('temp.csv', 'rU') as f:
    heading_list = next(f).rstrip().split(';')    # headings on the first line
    for line in f:
        process_data_row(line.rstrip().split(';'))