繁体   English   中英

python:拆分csv文件后添加了\\ n

[英]Python: \n added after splitting csv file

由于某些原因,当我从.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

脚本输出

脚本输出

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

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

从文件读取的数据中包含换行符。 readlines()不会删除它,其实你会发现,新行字符出现headings

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

更好的方法是对从文件读取的数据使用splitlines() 无论类型( '\\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换行符( '\\r'readlines()失败,因此您应通过指定'rU'作为模式来打开具有通用换行符支持的文件:

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

值得一提的另一件事是,如果文件很大,因为一次性读取整个文件,以这种方式处理文件会消耗大量内存。 相反,像这样遍历文件会更有效:

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(';'))

最后是真正的答案。 您可以使用csv模块避免上述所有麻烦:

import csv

with open('temp.csv', 'rU') as csv_file:    # NB. 'rU' is important for handling mac newlines
    csv_data = csv.reader(csv_file, delimiter=';')
    heading_list = next(csv_data)
    for row in csv_data:
        process_data_row(row)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM