发现这真的很奇怪,出于某种原因,当我从.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
脚本输出
答案 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(';'))