2015-04-12 42 views
0

我正在使用python 2.7.9和OS X Yosemite。我有一个叫list.dat文件,该文件包含以下内容:Python读取 n作为字符串

item1, a 
item2, b 
item3, c 

,我有一个python脚本:

list=[] 
f=open('list.dat','r') 
for line in f.readlines(): 
    list.append(line.rsplit(',')) 

f.close() 

print list 

它产生的输出:

[['item1', ' a\n'], ['item2', ' b\n'], ['item3', ' c']] 

\n。应该出现在输出中?如果是这样,我该如何修改代码以避免它们?

回答

2

'\n'表示一个新行,显然是在您的文本文件中。因此,'\n's应该出现在输出中。

从本质上讲,你.dat文件是:

item1, a\n 
item2, b\n 
item3, c\n 

要删除,请尝试以下操作:

list=[] 
f=open('list.dat','r') 
for line in f.readlines(): 
    list.append(line.strip('\n').rsplit(',')) 

f.close() 

print list 

这使用str.strip('\n')删除字符串中的新行('\n' S)。


>>> list=[] 
>>> f=open('list.dat','r') 
>>> for line in f.readlines(): 
...  list.append(line.strip('\n').rsplit(',')) 
... 
>>> f.close() 
>>> 
>>> print list 
[['item1', ' a'], ['item2', ' b'], ['item3', ' c']] 
>>> 
1

'\ n' 为换行字符。您必须手动删除它,或使用csv -module:

import csv 
with open('list.dat') as f: 
    data = list(csv.reader(f)) 
print data 
+0

该解决方案更'pythonic':它使用了上下文管理器来处理文件的打开/关闭和内置的CSV模块,导致了更短的代码更易于读取和写入。 –

3

您可以添加replacestrip功能。

并且从未将您的列表命名为"list",因为list is a python builtin

list1=[] 
f=open('list.dat','r') 
for line in f.readlines(): 
    list1.append(line.rsplit(',').strip('\n')) 

f.close() 

print list1 
+0

'str.strip('\ n')'是为这项任务而设计的,'str.replace'有明显的缺陷,因此在这种情况下pythonic减少 –

+0

@mu :--)谢谢 –

+0

我同意@ A.J。我会更新我的回答 –