【问题标题】:Python unwanted empty lines after string strip字符串剥离后的Python不需要的空行
【发布时间】:2015-08-15 00:59:41
【问题描述】:

我有一个 csv

"AA","AB","AC"
"BA","BB","BC"
"CA","CB","CC"

删除字符串后说“ csv 格式更改为

AA,AB,AC

BA,BB,BC

CA,CB,CB

我应该怎么做才能避免多余的线条?

 import fileinput
 for line in fileinput.FileInput("test.csv",inplace=1):
    line = line.replace('"','')
    print (line)

【问题讨论】:

    标签: python csv syntax


    【解决方案1】:

    看起来您正在打印它,看起来像 Python 3,并且看起来您的文件内容已经包含必要的换行符。因此,您需要告诉print() 函数不要添加自己的换行符:

    print(line, end='')
    

    【讨论】:

    • 你想要end,而不是sep
    • 糟糕。我使用sepend 更频繁。
    【解决方案2】:

    读取时每一行都包含终止换行符。此外,print() 还会添加它自己的新行,因此您最终会得到两个新行。

    但您没有按照问题标题的建议使用strip()

    要解决这个问题,您可以使用 rstrip() 删除每行末尾的任何空格:

    import fileinput
    for line in fileinput.FileInput("test.csv",inplace=1):
        line = line.replace('"','').rstrip()
        print (line)
    

    这将删除额外的换行符,但请注意,它还会删除行尾的其他空格。

    另一种方法是防止 print() 添加自己的新行:

    Python 2:

    print(line),    # comma prevents new line
    

    Python 3:

    print(line, end='')
    

    【讨论】:

    • 只是好奇:为什么 Python 2 版本中的括号?
    • @ron.rothman:只是因为 OP 在问题中有它们,我不清楚 OP 是使用 Python 2 还是 Python 3。它们在 Python 2 中没有伤害,所以我把他们留在那里。
    • 从技术上讲,在 Python 2 中添加括号可以将 print 1,2,3 -> 1 2 3 变成 print(1,2,3) -> (1, 2, 3)。但是,这不是一个问题,因为这个问题涉及字符串。
    【解决方案3】:

    你为什么要这样做?您应该使用 csv 模块,它会为您处理 , 和引号。示例 -

    import csv
    with fileinput.FileInput('test.csv',inplace=1) as f:
        reader = csv.reader(f)
        for row in reader:
            print (','.join(row))
    

    示例/演示 -

    >>> import csv
    >>> with fileinput.FileInput('test.csv',inplace=1) as f:
    ...     reader = csv.reader(f)
    ...     for row in reader:
    ...         print(','.join(row))
    ...
    AA,AB,AC
    BA,BB,BC
    CA,CB,CC
    

    【讨论】:

    • 我认为 OP 想要更新文件,因此使用fileinput。然而,这可能不是一个有效的假设:)
    • csv 模块也适用于文件输入。为此更新代码和示例。
    【解决方案4】:

    您看到了额外的行,因为从文件中读取的行以 '\n' 结尾,并且 print(line) 语句附加了一个额外的换行符。

    您可以使用 rstrip() 去除尾随的换行符:

     import fileinput
     for line in fileinput.FileInput("test.csv",inplace=1):
        line = line.rstrip().replace('"','')
        print (line)
    

    【讨论】:

      猜你喜欢
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 2021-08-12
      相关资源
      最近更新 更多