使用Python在文本文件中查找和替换

19 投票
3 回答
103376 浏览
提问于 2025-04-16 10:18

我有一个文本文件,里面大约有40万行。现在我需要把这个文本文件导入一个程序,但这个程序只接受用空格或制表符分隔的文本文件,而我的文本文件是用分号分隔的。导出文本文件的程序(Arcmap)里没有选项可以更改分隔符,而且如果我在文本文件里手动查找和替换,真的要花两天时间。

我找过一些脚本来解决这个问题,但它们似乎都是把整行的内容替换成一个空格,而不是单独替换每个分号,这样我最后得到的就是一个空的文本文件。

这是我文本文件的一部分:

"OID_";"POINTID";"GRID_CODE";"POINT_X";"POINT_Y"
;1;-56.000000;200900.250122;514999.750122
;2;-56.000000;200900.750122;514999.750122
;3;-56.000000;200901.250122;514999.750122
;4;-57.000000;200901.750122;514999.750122
;5;-57.000000;200902.250122;514999.750122
;6;-57.000000;200902.750122;514999.750122
;7;-57.000000;200903.250122;514999.750122
;8;-57.000000;200903.750122;514999.750122
;9;-57.000000;200904.250122;514999.750122
;10;-57.000000;200904.750122;514999.750122

我希望它看起来像这样:

1 -56.000000 200900.250122 514999.750122
2 -56.000000 200900.750122 514999.750122

3 个回答

4

Python 3.2 新增了一个功能,可以把这个当作上下文管理器使用,这样在处理文件时,如果因为某种原因出现问题,文件总是会被关闭。

import fileinput
def main():
    with fileinput.input(inplace=True) as f:
        for line in f:
            line = line.replace(";", " ")
            print(line, end='')

(灵感来源)

使用时,只需要提供你想处理的文本文件即可。

21

在Python中,你可以使用 fileinput 这个库。

import fileinput
for line in fileinput.FileInput("file",inplace=1):
    line = line.replace(";"," ")
    print line,

这个方法会把你所有的“;”替换成空格,直接在原来的地方修改。

33

这样怎么样:

sed -i 's/;/ /g' yourBigFile.txt

这不是一个Python的解决方案。你需要在一个命令行窗口里运行这个。不过如果你用的是记事本,我猜你是在用Windows系统。那么这里有一个Python的解决方案:

f1 = open('yourBigFile.txt', 'r')
f2 = open('yourBigFile.txt.tmp', 'w')
for line in f1:
    f2.write(line.replace(';', ' '))
f1.close()
f2.close()

撰写回答