python - 从 csv 文件中删除换行符

标签 python newline

我正在尝试在 python 中处理一个 csv 文件,该文件在每一行/行的中间都有 ^M 字符,这是一个换行符。我无法以“rU”以外的任何模式打开文件。

如果我确实以“rU”模式打开文件,它会读取换行符并拆分文件(创建换行符)并给我两倍的行数。

我想完全删除换行符。怎么办?

最佳答案

请注意,作为 the docs说:

csvfile can be any object which supports the iterator protocol and returns a string each time its next() method is called — file objects and list objects are both suitable.

因此,您始终可以在将文件交给您的阅读器DictReader 之前对其进行过滤。而不是这个:

with open('myfile.csv', 'rU') as myfile:
    for row in csv.reader(myfile):

这样做:

with open('myfile.csv', 'rU') as myfile:
    filtered = (line.replace('\r', '') for line in myfile)
    for row in csv.reader(filtered):

'\r' 是 Python(和 C)拼写 ^M 的方式。因此,这只是通过用空字符串替换每个字符来去除所有 ^M 字符,无论它们出现在哪里。


I guess I want to modify the file permanently as opposed to filtering it.

首先,如果您想在运行 Python 脚本之前修改文件,为什么不从 Python 外部进行呢? sedtr、许多文本编辑器等都可以为您完成这项工作。这是一个 GNU sed 示例:

gsed -i'' 's/\r//g' myfile.csv

但是如果你想用 Python 来做,它并没有那么冗长,而且你可能会发现它更具可读性,所以:

首先,如果您想从中间插入或删除,您不能真正就地修改文件。通常的解决方案是编写一个新文件,然后将新文件移动到旧文件上(仅限 Unix)或删除旧文件(跨平台)。

跨平台版本:

os.rename('myfile.csv', 'myfile.csv.bak')
with open('myfile.csv.bak', 'rU') as infile, open('myfile.csv', 'wU') as outfile:
    for line in infile:
        outfile.write(line.replace('\r'))
os.remove('myfile.csv.bak')

不太笨重但仅限 Unix 的版本:

temp = tempfile.NamedTemporaryFile(delete=False)
with open('myfile.csv', 'rU') as myfile, closing(temp):
    for line in myfile:
        temp.write(line.replace('\r'))
os.rename(tempfile.name, 'myfile.csv')

关于python - 从 csv 文件中删除换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14390123/

相关文章:

python - 如何在数据框中的同一行中添加以数字开头的字符串?

python - Jupyter 加载空白网页

javascript - Ace 编辑器按回车键不添加换行符

git - 如何阻止 Git 在本地文件中插入回车符?

python:子类元类

python - json.dumps 值错误 : Extra data unable to dump json outputs

python - 尝试使用 Tkinter 将多个框架嵌套在一个框架中。我如何以面向对象的方式实现这一点?

gradle - sourceSets的Gradle行结尾字符

text-editor - 哪些文本编辑器可以正确处理 Windows 和 Unix 样式的换行符?

python-2.7 - Python 电子邮件仅在第一行丢失换行符