Python 如何替换CSV文件中的特定字符
我有一个CSV文件文件夹(~100),每个文件都有一个未知字符,如下所示�. 此未知字符应为双引号(“)。由于此未知字符,我无法运行CSV到xlsx转换器将文件转换为xlsx格式 我尝试使用Python 如何替换CSV文件中的特定字符,python,csv,Python,Csv,我有一个CSV文件文件夹(~100),每个文件都有一个未知字符,如下所示�. 此未知字符应为双引号(“)。由于此未知字符,我无法运行CSV到xlsx转换器将文件转换为xlsx格式 我尝试使用csv.read()函数,但它没有使用replace函数,因为csv.read()返回一个读卡器对象,而replace不起作用。如何替换该字符并将替换的内容写回csv,以便运行我的csv-to-xlsx转换器 例如: 当前文件内容: “你好� 转换后的输出: “你好”试试这个: import fileinpu
csv.read()
函数,但它没有使用replace函数
,因为csv.read()
返回一个读卡器对象,而replace不起作用。如何替换该字符并将替换的内容写回csv,以便运行我的csv-to-xlsx转换器
例如:
当前文件内容:
“你好�
转换后的输出:
“你好”试试这个:
import fileinput
with fileinput.FileInput("file.csv", inplace=True) as file:
for line in file:
print(line.replace('�', '"'), end='')
试试这个:
import fileinput
with fileinput.FileInput("file.csv", inplace=True) as file:
for line in file:
print(line.replace('�', '"'), end='')
sed命令是为这种工作而设计的。它查找并替换文件中的字符。 在终端中使用此选项
sed -i 's/old-word/new-word/g' filename.csv
您的
旧单词
应该是未知字符,而新单词
双引号sed命令是为此类工作而设计的。它查找并替换文件中的字符。
在终端中使用此选项
sed -i 's/old-word/new-word/g' filename.csv
您的
旧单词
应该是未知字符,而新单词
应该是双引号我使用这个小函数来处理此类问题。
这段代码完全是不言自明的。它打开一个文件,全部读取(对于大于RAM的文件可能不起作用),然后用补丁版本重写它
def patch_file(file, original, patch):
with open(file, 'r') as f:
lines = f.readlines()
with open(file, 'w') as f:
for line in lines:
f.write(line.replace(original, patch))
patch_file(file='yourCSVfile.txt', original='�', patch'"')
我使用这个小函数来处理这些问题。 这段代码完全是不言自明的。它打开一个文件,全部读取(对于大于RAM的文件可能不起作用),然后用补丁版本重写它
def patch_file(file, original, patch):
with open(file, 'r') as f:
lines = f.readlines()
with open(file, 'w') as f:
for line in lines:
f.write(line.replace(original, patch))
patch_file(file='yourCSVfile.txt', original='�', patch'"')
我试过了,但这些都是我的错误。回溯(最后一次调用):文件“test.py”,第4行,在文件“/usr/lib/python3.8/fileinput.py”中的第248行,在下一行=self.\u readline()文件“/usr/lib/python3.8/fileinput.py”,第368行,在_readline返回self.\u readline()文件“/usr/lib/python3.8/codecs.py”,第322行,在解码中(结果,已消耗)=self.\u buffer\u decode(data,self.errors,final)UnicodeDecodeError:“utf-8”编解码器无法解码521-522位置的字节:无效的延续字节似乎编码已中断,521-522处的字节不是有效的utf-8字符。你可以试试看� 不仅仅是由文本编辑器放在那里表示一个破碎的字符。我尝试过这个,但这些是我得到的错误。回溯(最后一次调用):文件“test.py”,第4行,在文件“/usr/lib/python3.8/fileinput.py”中的第248行,在下一行=self.\u readline()文件“/usr/lib/python3.8/fileinput.py”,第368行,在_readline返回self.\u readline()文件“/usr/lib/python3.8/codecs.py”,第322行,在解码中(结果,已消耗)=self.\u buffer\u decode(data,self.errors,final)UnicodeDecodeError:“utf-8”编解码器无法解码521-522位置的字节:无效的延续字节似乎编码已中断,521-522处的字节不是有效的utf-8字符。你可以试试看� 不是由文本编辑器放在那里表示一个坏字符。我更倾向于将输出重定向到一个新文件,而不是就地更新,以防结果不是我所期望的。不,这不起作用。终端没有输出任何东西,文件也没有更改.sed-i的/�/“/g'test.csv这是我尝试过的。但它确实适用于文本文件。我更倾向于将输出重定向到新文件,而不是就地更新,以防结果与我预期的不一样。不,这不起作用。终端没有输出任何内容,文件也没有更改。sed-I的/�/"/g'test.csv这是我尝试过的。但它确实适用于文本文件。您是否控制csv文件的创建方式?最好是在源位置解决此问题。您是否控制csv文件的创建方式?最好是在源位置解决此问题。读取文件是主要问题。读取csv文件时出现错误,表示编码器错误。请重试使用open(文件'r',econding='latin')编辑编码
,如果使用open(文件'r',encoding='utf8',errors='ignore')编辑错误,也可以设置忽略/替换如f:
如果您可以共享其中一个文件,我可以提供更多帮助。读取文件是主要问题。读取csv文件时发生错误,它表示编码器错误。尝试使用open(file,'r',econding='latin')更改编码
如果使用open出现错误,您还可以设置忽略/替换(文件'r',编码='utf8',错误='ignore')为f:
如果您可以共享其中一个文件,我可以提供更多帮助。