【问题标题】:How do I properly format this string in Python?如何在 Python 中正确格式化此字符串?
【发布时间】:2014-09-22 15:46:18
【问题描述】:

我正在解析一个包含 txt 文件的文件夹。这些文本文件在第二行有一个戴尔计算机服务标签。我想抓取第二行并最终将其放入 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']

【问题讨论】:

  • 第二个字符串的预期输出是什么?
  • 你能附上你的*txt文件吗?
  • 你知道你的 csv 文件使用的是什么编码吗?这个问题很可能是 Python 在打开文件时假设的编码不正确。

标签: python string python-2.7 encoding


【解决方案1】:

所以我在第二个字符串的输出中看到了空字符。看起来这些都存在于原始文件中。要删除那些使用下面的代码

row[1] = row[1].replace('\x00','').strip()

给出的输出 CBD1WL1 看起来可能像一个有效的服务标签,但我不知道。

【讨论】:

  • 这将解决这个问题,但真正的问题是打开文件时使用了错误的编码。
【解决方案2】:

您需要使用正确的编码打开文件。看起来您的文件编码为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-16encoded 字符串的开头有一个 BOM,即 \xff\xfeb 部分。这将在您的文件的第一行,您将其丢弃在您的代码中。之后,它会显示为\x00<character you expect>,这正是您所拥有的。

【讨论】:

  • 做到了。谢谢。我还在第 11 行添加了 .strip() 以消除服务标签后的多余空格。
猜你喜欢
  • 2019-08-21
  • 2014-10-12
  • 2017-09-25
  • 2021-05-11
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
相关资源
最近更新 更多