Python 如何替换CSV文件中的特定字符

Python 如何替换CSV文件中的特定字符,python,csv,Python,Csv,我有一个CSV文件文件夹(~100),每个文件都有一个未知字符,如下所示�. 此未知字符应为双引号(“)。由于此未知字符,我无法运行CSV到xlsx转换器将文件转换为xlsx格式 我尝试使用csv.read()函数,但它没有使用replace函数,因为csv.read()返回一个读卡器对象,而replace不起作用。如何替换该字符并将替换的内容写回csv,以便运行我的csv-to-xlsx转换器 例如: 当前文件内容: “你好� 转换后的输出: “你好”试试这个: import fileinpu

我有一个CSV文件文件夹(~100),每个文件都有一个未知字符,如下所示�. 此未知字符应为双引号(“)。由于此未知字符,我无法运行CSV到xlsx转换器将文件转换为xlsx格式

我尝试使用
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:
如果您可以共享其中一个文件,我可以提供更多帮助。