繁体   English   中英

python-将十六进制数字写入csv

[英]python - writing hex digits to csv

我有以下字符串:

>>> line = '\x00\t\x007\x00\t\x00C\x00a\x00r\x00d\x00i\x00o\x00 \x00M\x00e\x00t\x00a\x00b\x00o\x00l\x00i\x00c\x00 \x00C\x00a\x00r\x00e\x00\t\x00\t\x00\t\x00\t\x00 \x001\x002\x00,\x007\x008\x008\x00,\x005\x002\x008\x00.\x000\x004\x00\r\x00\n'

当我在python终端中键入变量line ,它显示以下内容:

>>> line
'\x00\t\x007\x00\t\x00C\x00a\x00r\x00d\x00i\x00o\x00 \x00M\x00e\x00t\x00a\x00b\x00o\x00l\x00i\x00c\x00 \x00C\x00a\x00r\x00e\x00\t\x00\t\x00\t\x00\t\x00 \x001\x002\x00,\x007\x008\x008\x00,\x005\x002\x008\x00.\x000\x004\x00\r\x00\n'

当我打印它时,它显示以下内容:

>>> print line
        7    Cardio Metabolic Care               12,788,528.04

在可变line每个单词都使用\\t分隔,我想将其保存到csv文件中。 所以我尝试使用以下代码:

import csv
with open('test.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=',')
    spamwriter.writerow(line.split('\t'))

当我查看test.csv文件时,仅得到以下内容

,,,,,,

有什么可以将这些词放入csv文件中的吗? 请帮助。

您输入的文本未损坏,已编码-UTF-16(在这种情况下为Big Endian)。 它是CSV本身,只是使用tab作为分隔符。

您必须将其解码为字符串,然后才能正常使用。

理想情况下,当您从源中读取字节编码时,请声明正确的字节编码。 例如,当您打开文件时,可以声明文件使用的编码,以便文件阅读器为您解码内容。

如果您从某个来源获得了该字节字符串,而在阅读时却无法声明编码,则可以手动解码:

line = '\x00\t\x007\x00\t\x00C\x00a\x00r\x00d\x00i\x00o\x00 \x00M\x00e\x00t\x00a\x00b\x00o\x00l\x00i\x00c\x00 \x00C\x00a\x00r\x00e\x00\t\x00\t\x00\t\x00\t\x00 \x001\x002\x00,\x007\x008\x008\x00,\x005\x002\x008\x00.\x000\x004\x00\r\x00\n'
decoded = line.decode('utf_16_be')

print decoded
#   7   Cardio Metabolic Care                12,788,528.04

但是由于我想您实际上是从文件中读取它:

import csv
import codecs

with codecs.open('input.txt', 'r', encoding='utf16') as in_file, codecs.open('output.csv', 'w', encoding='utf8') as out_file:
    reader = csv.reader(in_file, delimiter='\t')
    writer = csv.writer(out_file, delimiter=',', quotechar='"')

    writer.writerows(reader)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM