从CSV文件中移除读取的新行符\n

3

我有一个看起来像这样的CSV文件:

Name1,1,2,3
Name2,1,2,3
Name3,1,2,3

我需要逐行将其读入2D列表中。我已经写了几乎可以完成工作的代码;但是,我遇到了问题,就是无法删除第三个索引结尾处的换行符'\n'

    score=[]

    for eachLine in file:
            student = eachLine.split(',')
            score.append(student)
    print(score)

目前的输出如下:
[['name1', '1', '2', '3\n'], ['name2', '1', '2', '3\n'],

我需要它看起来像这样:

我需要的是这个样子:

[['name1', '1', '2', '3'], ['name2', '1', '2', '3'],

我已经使用读取器完成了它。只是想看看还有哪些其他方法可以做到 - 学习中! - learningpython
4个回答

3

在处理每一行时,只需简单地调用str.strip

score=[]

for eachLine in file:
        student = eachLine.strip().split(',')
        score.append(student)
print(score)

1
您可以使用 splitlines

第一种方法

>>> s = '''Name1,1,2,3
... Name2,1,2,3
... Name3,1,2,3'''
>>> [ item.split(',') for item in s.splitlines() ]
[['Name1', '1', '2', '3'], ['Name2', '1', '2', '3'], ['Name3', '1', '2', '3']]

第二种方法
>>> l = []
>>> for item in s.splitlines():
...     l.append(item.split(','))
... 
>>> l
[['Name1', '1', '2', '3'], ['Name2', '1', '2', '3'], ['Name3', '1', '2', '3']]

0

如果你知道它是一个换行符,而且只是一个换行符,

score=[]

for eachLine in file:
        student = eachLine[:-1].split(',')
        score.append(student)
print(score)

使用切片来在分割之前删除尾随的换行符。
根据评论者的建议进行了编辑,更加整洁。

为什么不直接使用 strip 呢?如果你要切片,为什么不用 [0:-1] 呢? - jonrsharpe
@jonrsharpe,我认为不是[:-1]。 - RiaD
我无法告诉你为什么要剥离或不剥离。我个人更喜欢对我的对象发生的事情进行更具体的描述。与其让我的字符串受到(广泛且有良好文档记录的)strip函数的命运,我知道它只会从末尾删除一个。没有惊喜(虽然使用strip不应该有任何惊喜)。称之为怪癖?也许会有性能差异吗?@jonrsharpe? - 0xhughes
我期望切片更快(timeit表明在“foo\n”上大约快两倍),但如果文件末尾没有空行,则会剪切掉最后一行的最后一个字符。此外,strip更常规,因此阅读时的心理负担较小。 - jonrsharpe
1
@jonrsharpe 的观点很好,关于可能切片所需的数据,必须小心。 - 0xhughes

0
使用rstrip函数识别每行末尾的\n并将其删除。参考下面的代码。
with open('myfile.csv', 'wb') as file: 
    for line in file:
        line.rstrip('\n')
        file.write(line)

为什么不直接使用 rstrip()strip() 呢? - jonrsharpe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接