如何在Python中正确格式化此字符串?

时间:2014-07-30 20:30:05

标签: python string python-2.7 encoding

我正在解析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']

2 个答案:

答案 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,看起来可能像一个有效的服务标签,但我不能说。