【问题标题】:Unexplainable leading space only in first value when reading from csv从 csv 读取时,仅在第一个值中出现无法解释的前导空格
【发布时间】:2019-04-14 19:34:52
【问题描述】:

我正在从 .csv 读取一些值,并且由于某种原因,一个空格被附加到第一个值的开头。有谁知道为什么会这样?

输入:

    with open('input.csv') as csv_file:
    csv_reader = csv.reader(csv_file)
    for row in csv_reader:

        host = row[0]
        destination = row[1]
        port = row[2]
        print("HOST")
        print(host)

输出:

请注意,input.csv 在第一个值的开头没有任何空格。同样使用 lstrip() 似乎也无法解决此问题。

【问题讨论】:

  • print(ascii(host)) 并显示结果。

标签: python csv io


【解决方案1】:

试试

with open('input.csv') as csv_file:
csv_reader = csv.reader(csv_file)
for row in csv_reader:

    host = row[0]
    host = host.strip() #  choo off whitespace
    destination = row[1]
    port = row[2]
    print("HOST")
    print(host)

附注:

csv_reader = csv.reader(csv_file, skipinitialspace=True)

skipinitialspace:如果设置为 True,则紧跟在分隔符后面的任何空格都会被忽略。

【讨论】:

  • @OamarKanji,这只是第一个值HOST Ben 吗?请您显示所需的结果。
  • csv 中有三列:Host、Destination、Port 但只有第一列的第一行中的值受此影响
  • 我现在在问题中包含了输入 csv 的屏幕截图
  • 好的,试试host = row[0].strip() 或下一行host=host.strip()
【解决方案2】:
 with open('input.csv') as csv_file:
    csv_reader = csv.reader(csv_file)
    for row in csv_reader:

        host = row[0]
        destination = row[1]
        port = row[2]
        print("HOST")
        print(host) #  Remove spaces by treating strings
        print(host.strip()) # Default is a blank character

【讨论】:

  • 谢谢,但仍然无法工作,即使我不明白为什么它不起作用
【解决方案3】:

它可能是一个零宽度无间隔 (U+FEFF) 代码点,用作 UTF16 和 UTF32 编码文件的字节顺序标记 (BOM) 以及 UTF-8 编码文件的签名。 .strip() 不会删除它。假设您的 .CSV 以 UTF-8 编码,则使用 open('input.csv',encoding='utf-8-sig') 会删除签名(如果存在)。其他选项是utf16utf32。他们需要 BOM 并将其删除,但很可能是 UTF-8。

使用print(ascii(host)) 来查看角色的实际情况:

>>> host = '\ufeffBob'
>>> print(x)
 Bob
>>> print(ascii(x))
'\ufeffBob'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 2021-06-19
    • 1970-01-01
    • 2016-01-28
    • 2014-04-28
    • 2013-01-07
    • 1970-01-01
    相关资源
    最近更新 更多