小编ral*_*len的帖子

优化在Python中查找和替换大文件

我是Python 的完全初学者或任何严肃的编程语言.我终于得到了一个原型代码,但我觉得它太慢了.

我的目标是根据我拥有的csv文件在一个目录中找到并替换所有文件(它们是csv)中的一些中文字符.这些文件按年份编号很好,例如2000-01.csv,并且是该目录中的唯一文件.

我将循环遍历大约25个文件,每个文件在500mb附近(大约一百万行).我将使用的字典将有大约300个元素,我将unicode(中文字符)更改为整数.我尝试了一个测试运行,假设一切都线性增长(?),看起来它需要大约一个星期才能运行.

提前致谢.这是我的代码(不要笑!):

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

import os, codecs

dir = "C:/Users/Roy/Desktop/test/"

Dict = {'hello' : 'good', 'world' : 'bad'}

for dirs, subdirs, files in os.walk(dir):
    for file in files:
        inFile = codecs.open(dir + file, "r", "utf-8")
        inFileStr = inFile.read()
        inFile.close()
        inFile = codecs.open(dir + file, "w", "utf-8")
        for key in Dict:
            inFileStr = inFileStr.replace(key, Dict[key])
        inFile.write(inFileStr)
        inFile.close()
Run Code Online (Sandbox Code Playgroud)

python optimization replace

6
推荐指数
1
解决办法
6151
查看次数

带有中文字符的Python中的编码错误

我是一名初学者,无法在Python 2.7中将数十个(简体)中文字符解码为UTF-8的数十个CSV文件.

我不知道输入文件的编码,所以我尝试了所有可能的编码 - GB18030,UTF-7,UTF-8,UTF-16和UTF-32(LE&BE).此外,为了更好的衡量,GBK和GB3212,虽然这些应该是GB18030的子集.当UTF到达第一个汉字时,它们都会停止.除GB18030外,其他编码在第一行的某处停止.我认为这将是解决方案,因为它读取了前几个文件并解码它们.我的部分代码,逐行阅读,是:

line = line.decode("GB18030")
Run Code Online (Sandbox Code Playgroud)

我尝试解码的前两个文件工作正常.在第三个文件的中途,Python吐出来

UnicodeDecodeError: 'gb18030' codec can't decode bytes in position 168-169: illegal multibyte sequence
Run Code Online (Sandbox Code Playgroud)

在这个文件中,大约有一百万行有大约5个这样的错误.

我在文本编辑器中打开输入文件并检查哪些字符给出了解码错误,前几个字符在CSV文件的特定列中都有欧元符号.我相信这些是拼写错误,所以我只想删除欧元字符.我想逐个检查编码错误的类型; 我想摆脱所有的欧元错误,但不要只是忽略别人,直到我先看看它们.

编辑:我用的chardet是GB2312编码,所有文件的置信度为.99.我尝试使用GB2312解码,它给出了:

UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 108-109: illegal multibyte sequence
Run Code Online (Sandbox Code Playgroud)

python encoding cjk

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

python ×2

cjk ×1

encoding ×1

optimization ×1

replace ×1