Python 从csv读取时,无法解释的前导空格仅在第一个值中

Python 从csv读取时,无法解释的前导空格仅在第一个值中,python,csv,io,Python,Csv,Io,我正在从.csv读取一些值,出于某种原因,在第一个值的开头追加了一个空格。有人知道为什么会这样吗 输入: 输出: 请注意,input.csv在第一个值的开头没有任何空格。使用lstrip()似乎也无法解决此问题。请尝试使用 with open('input.csv') as csv_file: csv_reader = csv.reader(csv_file) for row in csv_reader: host = row[0] host = host.strip()

我正在从.csv读取一些值,出于某种原因,在第一个值的开头追加了一个空格。有人知道为什么会这样吗

输入:

输出:

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

请尝试使用

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,将忽略紧跟在分隔符后面的任何空白。

请尝试使用

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)
 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

附注:

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

skipinitialspace:如果设置为True,将忽略紧跟在分隔符后面的任何空白。

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

 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
使用
打印(ascii(主机))
查看字符的实际内容:

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

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

使用
打印(ascii(主机))
查看字符的实际内容:

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

@Oamakanji,这是第一个值吗?请显示所需的结果。csv中有三列:主机、目标、端口,但只有第一列第一行中的值受此影响。我现在在问题中包含了输入csv的屏幕截图。好的,试试像
Host=row[0].strip()
或在下一行
host=host.strip()
@OamarKanji中,这是否仅是第一个值
host Ben
?请显示所需的结果。csv中有三列:主机、目标、端口,但只有第一列第一行中的值受此影响。我现在在问题中包含了输入csv的屏幕截图。好的,试试像
Host=row[0].strip()
或在下一行中
host=host.strip()
谢谢,但仍然不工作,即使我不知道为什么它不工作谢谢,但是仍然不工作,即使我不知道为什么它不工作
print(ascii(host))
并显示结果。
print(ascii(host))
并显示结果。