【问题标题】:Python removing all \r\n within quotes in CSV filePython删除CSV文件中引号内的所有\r\n
【发布时间】:2018-12-03 10:33:19
【问题描述】:

我有一个 CSV 文件,其中包含一些数据。我想用某个字符替换 "" 中的所有换行符。但是这些引号之外的新行应该保留。实现这一目标的最佳方法是什么?

import sys, getopt

def main(argv):
    inputfile = ''
    outputfile = ''

    print(argv[0:])
    inputfile = argv[0:]

    file_object = open(argv[0:], "r")
    print(file_object)

    data = file.read(file_object)
    strings = data.split('"')[1::2]

    for string in strings:
        string.replace("\r", "")
        string.replace("\n", "")
        print(string)

    f = open("output.csv", "w")
    for string in strings:
        string = string.replace("\r", "")
        string = string.replace("\n", "")
        f.write(string)

    f.close()


if __name__ == "__main__":
    main(sys.argv[1])

这不太管用,因为 "" 和 ,'s 一样丢失了。

预期输入:

“dssdlkfjsdfj   \r\n ashdiowuqhduwqh \r\n”,
 "3"

预期输出:

"dssdlkfjsdfj    ashdiowuqhduwqh",
 "3"

【问题讨论】:

  • 这条线data = file.read(file_object)file是什么?你的意思是data = file_object.read()?
  • 我使用的是 python 3.6,不确定是否同样有效。但它基本上会打开文件并将其作为字符串读取。
  • 第一组引号的 unicode 字符不是标准的 ASCII 引号字符。 “ ” vs "" 这可能会妨碍您的data.split('"')。
  • 是 \r\n 字符文字换行符(即在 Python 中,将与 '\\r\\n' 匹配)还是换行符 实际换行符(即应该有一个文本文件中的换行符)?

标签: python string csv replace


【解决方案1】:

一个真实的样本会有所帮助,但给定in.csv:

"multi
line
data","more data"
"more multi
line data","other data"

以下内容将替换引号中的换行符:

import csv

with open('in.csv',newline='') as fin:
    with open('out.csv','w',newline='') as fout:
        r = csv.reader(fin)
        w = csv.writer(fout)
        for row in r:
            row = [col.replace('\r\n','**') for col in row]
            w.writerow(row)

out.csv:

multi**line**data,more data
more multi**line data,other data

【讨论】:

  • 酷!感谢您的解决方案。
【解决方案2】:

问题以一种非常简单的方式解决了。创建一个输出文件,并读取每个字符的输入文件。将每个字符写入输出文件,但在出现 " 时使用 ~ 运算符切换替换模式。在替换模式下,将所有 \r\n 替换为 ''(无)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 2018-07-27
    • 2023-01-11
    • 2017-02-14
    • 2017-04-21
    • 1970-01-01
    相关资源
    最近更新 更多