【问题标题】:Python reads \n as stringPython 将 \n 读取为字符串
【发布时间】:2026-02-13 22:25:11
【问题描述】:

我正在使用 python 2.7.9 和 OS X Yosemite。我有一个名为list.dat 的文件,其中包含以下内容:

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']]

\ns 是否应该出现在输出中?如果是这样,我该如何修改代码以使其不会?

【问题讨论】:

    标签: python python-2.7 osx-yosemite


    【解决方案1】:

    您可以添加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
    

    【讨论】:

    • str.strip('\n') 是为这个任务设计的,str.replace 有明显的缺陷,因此在这种情况下不那么 Python
    【解决方案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']]
    >>> 
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 这个解决方案更像pythonic:它使用上下文管理器来处理文件打开/关闭,并且内置的 csv 模块导致代码更短,更易于阅读和编写。