关于ZAKER 融媒体解决方案 合作 加入

根据文本文件中的位置替换特定单词 ( Python.

CocoaChina 10-21

我有一个元组列表 , 每个元组都包含一个要替换的字 , 它的行和列号位置来自给定的文本文件 . 我想通过文本文件并用一个字符替换该特定位置的特定单词 ( 例如 [ ( ‘ word1 ’ ,1,1 ) , ( ‘ word2 ’ ,1,9 ) , … ] ) .

换句话说 , 给定一个特定的单词 , 它在文本文件中的行号和列号我试图找到并用一个字符替换该单词 , 例如:

鉴于文本文件包含以下内容 ( 假设其位置如同显示 – 未写入 – 此处 )

Excited him now natural saw passage offices you minuter. At by stack

being court hopes. Farther so friends am to detract. Forbade concern

do private be. Offending residence but men engrossed shy. Pretend am

stack earnest arrived company so on. Felicity informed yet had to is

admitted strictly how stack you.

并且假定要替换的单词是堆叠的 , 文本中的位置是第 3 行和第 16 列 , 用字符 * 替换它 ,

因此 , 在替换发生后 , 文本文件现在将具有以下内容:

Excited him now natural saw passage offices you minuter. At by stack

being court hopes. Farther so friends am to detract. Forbade concern

do private be. Offending residence but men engrossed shy. Pretend am

* earnest arrived company so on. Felicity informed yet had to is

admitted strictly how stack you.

我考虑过linecache, 但对于大型文本文件来说效率似乎非常低效 . 另外 , 鉴于我已经有行号和列号 , 我希望有一种方法可以直接进入该位置并执行替换 .

有谁知道在 Python 中这样做的方法?

编辑

使用 numpy 的 genfromtxt 提出的初始解决方案 ( 很可能 ) 不适用于后续issue中的讨论 , 因为需要文本文件的每一行都存在而不是跳过 ( 例如空行 , 以 " 开头的字符串 ) w ’和’ / * .. / ’中的字符串 ) .

最佳答案

试试这样的食谱:

import numpy as npimport osdef changethis ( pos ) : # Notice file is in global scope appex = file [ pos [ 1 ] -1 ] [ :pos [ 2 ] ] + '*' + file [ pos [ 1 ] -1 ] [ pos [ 2 ] +len ( pos [ 0 ] ) : ] file [ pos [ 1 ] -1 ] = appexpos = ( 'stack', 3, 16 ) file = np.array ( [ i for i in open ( 'in.txt','r' ) ] ) #BEFORE EDIT: np.genfromtxt ( 'in.txt',dtype='str',delimiter=os.linesep ) changethis ( pos ) print ( file )

结果是这样的:

[ 'Excited him now natural saw passage offices you minuter. At by stack being court hopes. Farther' 'so friends am to detract. Forbade concern do private be. Offending residence but men engrossed' 'shy. Pretend am * earnest arrived company so on. Felicity informed yet had to is admitted' 'strictly how stack you.' ]

请注意 , 将一堆长字符串放入一个 numpy 数组并以某种方式更改它们是一种破解 , 但在插入更长的循环中时 , 它应该是高效的位置元组 .

编辑:因为 @ user2357112 让我意识到文件阅读器的选择不是最合适的 ( 虽然它适用于有问题的练习 ) , 所以我编辑了这个答案 , 以提供the follow up question中给出的相同解决方案 .

以上内容由"CocoaChina"上传发布 查看原文

觉得文章不错,微信扫描分享好友

扫码分享