我正在解析txt文件的文件夹。这些文本文件在第二行上有Dell计算机服务标签。我想抓住第二行并最终将其放在csv电子表格中。
当我从txt文件中读取服务标签到控制台时,它看起来很好。当我将其放入要输入电子表格行的列表中时,它的格式不正确。发生了什么,我该怎么做?
import glob
import os
#import csv
#fileWriter = csv.writer(open('inventory.csv', 'wb'), delimiter=',')
#fileWriter.writerow(["Computer Name", "Service Tag"])
for filename in glob.glob('*.txt'):
content = open(filename)
lines = content.readlines()
computer_name = os.path.splitext(filename)[0]
service_tag = lines[1]
row = [computer_name, service_tag]
print service_tag
print row
#fileWriter.writerow(row)
第一个文件的示例输出:
CBD1WL1
[Computer-PC', '\x00C\x00B\x00D\x001\x00W\x00L\x001\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00\r\x00\n']
答案 0 :(得分:3)
您需要使用正确的编码打开文件。看起来您的文件编码为utf-16
。您可以使用io.open
使用utf-16
编码来读取文件:
import glob
import os
import io
#import csv
#fileWriter = csv.writer(open('inventory.csv', 'wb'), delimiter=',')
#fileWriter.writerow(["Computer Name", "Service Tag"])
for filename in glob.glob('*.txt'):
content = io.open(filename, encoding='utf-16')
lines = content.readlines()
computer_name = os.path.splitext(filename)[0]
service_tag = lines[1]
row = [computer_name, service_tag]
print service_tag
print row
#fileWriter.writerow(row)
我非常有信心编码是UTF-16
:
>>> a = "blah\nCBD1WL1"
>>> a.decode('utf-8').encode('utf-16')
'\xff\xfeb\x00l\x00a\x00h\x00\n\x00C\x00B\x00D\x001\x00W\x00L\x001\x00'
utf-16
编码字符串的开头有一个BOM,即\xff\xfeb
部分。这将位于您的文件的第一行,您将在代码中丢弃。之后,它显示为\x00<character you expect>
,这正是您所拥有的。
答案 1 :(得分:2)
所以我在第二个字符串的输出中看到空字符。看起来这些文件存在于原始文件中。要删除它们,请使用以下代码
row[1] = row[1].replace('\x00','').strip()
给出输出CBD1WL1,看起来可能像一个有效的服务标签,但我不能说。