gpt4 book ai didi

Python:特殊字符编码

转载 作者:行者123 更新时间:2023-12-05 08:00:51 27 4
gpt4 key购买 nike

这是我用来替换文本文件中的特殊字符并将它们连接到一个文件中的代码。

# -*- coding: utf-8 -*-

import os
import codecs

dirpath = "C:\\Users\\user\\path\\to\\textfiles"
filenames = os.listdir(dirpath)

with codecs.open(r'C:\Users\user\path\to\output.txt', 'w', encoding='utf8') as outfile:
for fname in filenames:
currentfile = dirpath+"\\"+fname
with codecs.open(currentfile, encoding='utf8') as infile:
#print currentfile
outfile.write(fname)
outfile.write('\n')
outfile.write('\n')

for line in infile:

line = line.replace(u"´ı", "i")
line = line.replace(u"ï¬", "fi")
line = line.replace(u"fl", "fl")
outfile.write (line)

第一个 line.replace 工作正常,而其他的则没有(这是有道理的)并且由于没有生成错误,我虽然可能存在“可见性”问题(如果这是术语).所以我做了这个:

import codecs

currentfile = 'textfile.txt'
with codecs.open('C:\\Users\\user\\path\\to\\output2.txt', 'w', encoding='utf-8') as outfile:
with open(currentfile) as infile:
for line in infile:
if "ï¬" not in line: print "not found!"

总是返回“未找到!”证明这些字符未被读取。

当更改为 with codecs.open('C:\Users\user\path\to\output.txt', 'w', encoding='utf-8') as outfile:在第一个脚本中,我得到这个错误:

Traceback (most recent call last):
File C:\\path\\to\\concat.py, line 30, in <module>
outfile.write(line)
File C:\\Python27\\codecs.py, line 691, in write
return self.writer.write(data)
File C:\\Python27\\codecs.py, line 351, in write
data, consumed = self.encode(object, self.errors)
Unicode DecodeError: 'ascii' codec can't decode byte 0xe7 in position 0: ordinal
not in range (128)

因为我在 python 方面不是很经验,所以我无法弄清楚,通过已经可用的不同来源:python 文档(12)和 StackOverflow 中的相关问题(12) )

我被困在这里了。有什么建议么??欢迎大家回答!

最佳答案

如果您不使用编码,则使用 codecs.open() 毫无意义。要么使用 codecs.open() 为读取和写入指定的编码,要么完全放弃它。如果没有编码,codecs.open() 只是 open() 的别名。

在这里您确实确实想要指定您正在打开的文件的编解码器,以处理 Unicode 值。当偏离 ASCII 字符时,您还应该使用 unicode 文字值;为您的数据指定源文件编码或使用 unicode 转义码:

# -*- coding: utf-8 -*- 
import os
import codecs

dirpath = u"C:\\Users\\user\\path\\to\\textfiles"
filenames = os.listdir(dirpath)

with codecs.open(r'C:\Users\user\path\to\output.txt', 'w', encoding='utf8') as outfile:
for fname in filenames:
currentfile = os.path.join(dirpath, fname)
with codecs.open(currentfile, encoding='utf8') as infile:
outfile.write(fname + '\n\n')
for line in infile:
line = line.replace(u"´ı", u"i")
line = line.replace(u"ï¬", u"fi")
line = line.replace(u"fl", u"fl")
outfile.write (line)

这向解释器指定您使用 UTF-8 编解码器保存源文件,确保 u"´ı" 代码点正确解码为 Unicode 值,并使用 encoding 使用 codec.open() 打开文件时,确保您读取的行被解码为 Unicode 值,并确保您的 Unicode 值作为 UTF- 写入输出文件8.

请注意,dirpath也是一个 Unicode 值。如果您使用 Unicode 路径,则 os.listdir() 返回 Unicode 文件名,如果这些文件名中有任何非 ASCII 字符,这是必不可少的。

如果您做所有这些,您的源代码编码很可能与您从文件中读取的数据不匹配,并且您正试图用一些错误的编码字节集替换ASCII 字符。

关于Python:特殊字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17042489/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com