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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/4746190/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-18 17:19:25  来源:igfitidea点击:

Find and replace within a text file using Python

pythonfiletextreplace

提问by Alice Duff

I have a text file which is about 400,000 lines long. I need to import this text file into a program which only accepts text files which are delimited with spaces or tabs, but this text file is delimited with semi-colons. There is no option in the program I am exporting the text file from (Arcmap) to change the delimination and doing find and replace in the text file itself will literally take 2 days.

我有一个大约 400,000 行长的文本文件。我需要将此文本文件导入一个程序,该程序只接受以空格或制表符分隔的文本文件,但此文本文件以分号分隔。我从 (Arcmap) 导出文本文件以更改分隔的程序中没有选项,并且在文本文件本身中进行查找和替换实际上需要 2 天。

I have searched for a script to do this but they all seem to replace the whole LINE of the word file with a space, instead of individually replacing each semi-colon, Leaving me with an empty text file.

我已经搜索了一个脚本来执行此操作,但它们似乎都用空格替换了单词文件的整个 LINE,而不是单独替换每个分号,给我留下了一个空文本文件。

Here is a sample of my text file:

这是我的文本文件的示例:

"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

I need it to look something like this:

我需要它看起来像这样:

1 -56.000000 200900.250122 514999.750122
2 -56.000000 200900.750122 514999.750122

采纳答案by eumiro

How about this:

这个怎么样:

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

This is not a Python solution. You have to start this in a shell. But if you use Notepad, I guess you are on Windows. So here a Python solution:

这不是 Python 解决方案。您必须在 shell 中启动它。但是,如果您使用记事本,我猜您使用的是 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()

回答by ghostdog74

with Python, you can use fileinput.

使用 Python,您可以使用fileinput

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

this will replace all your ";" to spaces in place.

这将替换您所有的“;” 到位的空间。

回答by tshepang

Python 3.2 has added ability to use this as context manager, so that the files that fail during processing for some reason will always get closed:

Python 3.2 添加了将其用作上下文管理器的功能,以便在处理过程中由于某种原因失败的文件将始终关闭:

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

(inspiration)

灵感

Use it by supplying it with the text file you want to process.

通过向它提供要处理的文本文件来使用它。