【问题标题】:open a new line separated text file in python在python中打开一个新的行分隔的文本文件
【发布时间】:2018-03-01 16:34:49
【问题描述】:

这样使用python的open内置函数:

with open('myfile.csv', mode='r') as rows:
    for r in rows:
        print(r.__repr__())

我得到这个输出

'col1,col2,col3\n'
'fst,snd,trd\n'
'1,2,3\n'

我不想要 \n 字符。你知道删除那个字符的一些有效方法(代替明显的r.replace('\n',''))吗?

【问题讨论】:

  • open 有一个名为 newline 的参数,您可以在其中决定如何翻译 /n 字符。将其设置为 '' 将返回未翻译的换行符。欲了解更多信息,请查看here
  • @VasilisG。这会将字符串中的换行符保留为\r\n
  • 这里没有任何内容表明这些行是 CRLF 终止的。我认为@enneppi 只是想删除 LF。
  • @enneppi,除非您手动读取和解析 CSV 文件作为学术练习,否则您可能希望使用 Python 的 built-in CSV parser class

标签: python string csv


【解决方案1】:

如果您尝试读取和解析 csv 文件,Python 的 csv 模块可能会更好:

import csv
reader = csv.reader(open('myfile.csv', 'r'))
for row in reader:
    print(', '.join(row))

虽然您无法在此处更改 reader 的行终止符,但它以“\r”或“\n”结束一行,这适用于您的情况。

https://docs.python.org/3/library/csv.html#csv.Dialect.lineterminator

同样,对于大多数情况,我认为您不需要手动解析 csv 文件。有几个问题/原因可以让您更轻松地使用 csv 模块:包含分隔符的字段、包含换行符的字段、包含引号字符的字段等。

【讨论】:

    【解决方案2】:

    您可以使用string.strip(),它(不带参数)删除字符串开头和结尾的所有空格:

    for r in rows:
        print(r.strip())
    

    如果您只想删除换行符,可以将该字符作为参数传递给strip

    for r in rows:
        print(r.strip('\n'))
    

    对于一个干净的解决方案,您可以使用生成器来包装open,如下所示:

    def open_no_newlines(*args, **kwargs):
        with open(*args, **kwargs) as f:
            for line in f:
                yield line.strip('\n')
    

    然后您可以像这样使用open_no_newlines

    for line in open_no_newlines('myfile.csv', mode='r'):
        print(line)
    

    【讨论】:

    • 我的意思是有一些方法可以设置一些open 参数?
    • 您可以用\r\r\n 使用开放参数替换换行符,但不能删除它们。查看docs
    • @chrisz 你说的是哪个参数?
    • open() 有一个名为 newlines 的参数。我之前链接了文档。
    猜你喜欢
    • 2014-11-03
    • 2011-12-20
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 2021-03-22
    • 2021-06-22
    相关资源
    最近更新 更多