【问题标题】:Find and replace within a text file using Python使用 Python 在文本文件中查找和替换
【发布时间】:2011-06-12 09:12:57
【问题描述】:

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

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

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

"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

【问题讨论】:

  • Alice,请编辑您的问题以显示 (1) 文件的前几行 (2) 修复后这些行的外观。我相当肯定我们可以帮助您,但我们需要确切地知道您需要做什么。还有,Python 2.x 还是 3.X?
  • 我需要一个 python 解决方案,因为在记事本中使用“查找全部替换”功能会导致我的计算机崩溃!
  • 约翰,我现在就编辑它。不过打开文件大约需要 10 分钟!!
  • Alice,(1) 请回答:Python 2.X 还是 3.X? (2) 请从文件重命名问题开始另一个问题(并从该问题中删除)
  • Alice,你确定每行有两条逻辑记录吗?领先的;有什么意义??实际上是否有任何换行符???

标签: python file text replace


【解决方案1】:

这个怎么样:

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

这不是 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()

【讨论】:

  • 直接复制到python中?我必须在它前面写什么吗(对不起我完全没用!)
  • @Alice,我已经为你添加了 Python 解决方案
  • 我得到错误:消息文件名行位置回溯 C:\Documents and Settings\DuffA\Mijn documenten\Downloads\search_replace.py 6 AttributeError: 'file' object has no attribute'替换'
【解决方案2】:

使用 Python,您可以使用 fileinput

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

这将取代你所有的“;”到位的空间。

【讨论】:

  • 这在 Windows 中为我在每一行之后添加了一个额外的换行符。
  • @TheMouthofaCow - 我建议进行修改以解决该问题。
  • 这样就解决了多余的行问题:stackoverflow.com/questions/25940101/…
【解决方案3】:

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)

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

【讨论】:

  • Tshepang 这条线是做什么的?打印(行,结束='')
  • "在行尾插入一个空字符串,而不是通常的\n 字符"
猜你喜欢
  • 2019-07-30
  • 2013-05-27
  • 2012-02-14
  • 1970-01-01
  • 2020-07-29
  • 2011-04-25
  • 1970-01-01
  • 2013-05-26
  • 2019-10-16
相关资源
最近更新 更多