尽管堆栈溢出的其他问题中有很多信息,但我还没有找到解决方案。 我从以 utf-8 编码的 txt 文件和 xml 文件导入数据。来自两种甲酸盐的数据被转换并分别放入 pandas 数据帧中(一个用于导入的 txt 文件,一个用于导入的 xml 文件)。每个数据帧都导出为 txt 文件。问题是这些 txt 文件必须编码为 cp1252。但它们是用 utf-8 编码的。
读取 xml 文件是通过
完成的 import xml.etree.ElementTree as ET
xml_file_path = path_files + xml_filename
tree = ET.parse(xml_file_path)
root = tree.getroot()
txt 文件的读取是通过
完成的import csv
with open(txt_filename, 'r', encoding=('cp1252')) as f:
reader = csv.reader(f, delimiter='\t')
list_results = list(tuple(line) for line in reader)
非 cp1252 可编码数据被替换为“?”使用此代码。
def filter_cp1252(text):
try:
encoded_text = text.encode('cp1252')
return text
except UnicodeEncodeError:
text2= ''
for nl, letter in enumerate(text):
try:
encoded_letter = letter.encode('cp1252')
text2 = text2 + letter
except:
text2 = text2 + '?'
return text2
非 cp 1252 的符号已成功替换为“?”。我只能在将文件导入为 utf-8 时进行测试,但为了安全起见,我将其放入代码中。
数据收集在一个列表中,并转换为 pandas 数据框。导出到 txt 完成后
df_import2.to_csv(output, header=None, index=None, sep='\t', mode ='w', encoding = 'cp1252')
尽管如此,输出是 utf-8(这让我发疯)。
有什么建议吗?我该如何解决我的问题?
我还首先将数据框导出到 Excel 并使用 pandas 重新导入,希望这可以解决问题。但 python 显然尽可能“更喜欢”utf-8。
问题不清楚,很多代码没有用。如果文本位于错误的代码页中,
open(...,encoding='cp1252')
会抛出错误。要加载无法映射的字符,您必须在 open 中使用 errors 参数。如果您使用 errors='replace'
,字符将被 ?
替换。
这意味着非拉丁文本来自 XML。您可以使用 to_csv
中的
errors argument来将非拉丁字符替换为
?
,而不是尝试转换代码中的文本。
最后,您可以使用
read_csv
和 encoding='cp1252' encoding_errors='replace'
将文本数据直接读取到数据框中。
var txt_frames=pd.read_csv(txt_filename,encoding='cp1252', encoding_errors='replace',sep='\t')
合并所有帧后,您可以使用
encoding_errors='replace'
将它们另存为 CP1252:
df_import2=pd.concat(all_frames)
df_import2.to_csv(output, encoding = 'cp1252', encoding_errors='replace', header=None, index=None, sep='\t')