我正在运行Python 2.7。
我有三个文本文件:data.txt
,find.txt
,和replace.txt
。现在,find.txt
包含我要搜索的几行data.txt
并将该部分替换为中的内容replace.txt
。这是一个简单的示例:
data.txt
pumpkin
apple
banana
cherry
himalaya
skeleton
apple
banana
cherry
watermelon
fruit
find.txt
apple
banana
cherry
replace.txt
1
2
3
所以,在上面的例子中,我要搜索的所有出现apple
,banana
以及cherry
在数据和更换这些线路1,2,3
。
我在使用正确的方法时遇到了一些麻烦,因为我data.txt
的内存大约为1MB,所以我想尽可能地提高效率。一种愚蠢的方法是将所有内容连接成一个长字符串并使用replace
,然后输出到新的文本文件,以便所有换行符都将被恢复。
import re
data = open("data.txt", 'r')
find = open("find.txt", 'r')
replace = open("replace.txt", 'r')
data_str = ""
find_str = ""
replace_str = ""
for line in data: # concatenate it into one long string
data_str += line
for line in find: # concatenate it into one long string
find_str += line
for line in replace:
replace_str += line
new_data = data_str.replace(find, replace)
new_file = open("new_data.txt", "w")
new_file.write(new_data)
但是对于像我这样的大数据文件来说,这似乎是如此令人费解和低效。另外,该replace
功能似乎已被弃用,因此效果不佳。
另一种方法是单步执行并跟踪找到匹配的哪一行。
像这样:
location = 0
LOOP1:
for find_line in find:
for i, data_line in enumerate(data).startingAtLine(location):
if find_line == data_line:
location = i # found possibility
for idx in range(NUMBER_LINES_IN_FIND):
if find_line[idx] != data_line[idx+location] # compare line by line
#if the subsequent lines don't match, then go back and search again
goto LOOP1
我知道代码不完整。我什至不知道是否可以从某行或某行之间的某行中搜索文件,但是再次,我对这一切的逻辑有些困惑。做这个的最好方式是什么?
谢谢!
如果文件很大,你要read
和write
一次在一个行 ,所以整个事情是不是一次加载到内存中。
# create a dict of find keys and replace values
findlines = open('find.txt').read().split('\n')
replacelines = open('replace.txt').read().split('\n')
find_replace = dict(zip(findlines, replacelines))
with open('data.txt') as data:
with open('new_data.txt', 'w') as new_data:
for line in data:
for key in find_replace:
if key in line:
line = line.replace(key, find_replace[key])
new_data.write(line)
编辑:我将代码更改为,read().split('\n')
而不是readliens()
这样,因此\n
不包含在查找和替换字符串中
问题内容: 我有一个大约40万行的文本文件。我需要将此文本文件导入一个程序,该程序仅接受以空格或制表符分隔的文本文件,但是此文本文件以分号分隔。我要从(Arcmap)导出文本文件的程序中没有选项来更改分隔,并且在文本文件本身中进行查找和替换实际上需要2天。 我已经搜索了一个脚本来执行此操作,但是它们似乎都用空格替换了单词文件的整个LINE,而不是单独替换了每个分号,而给我留了一个空的文本文件。 这
当我检查doc_text字符串时,我可以看到“{Today}”,但“{ConsultantName}”被拆分为多个运行。开始大括号和结束大括号不与单词放在一起--它们之间有XML标记: 代码
我有100个html网页与各种文本翻译。我也有翻译文本准备在一个word文档。所以我要做的就是找到多块不同的文本,然后用多块翻译的文本替换它们。我通常使用dreamweaver,它有一个很好的查找/替换功能,但它一次只能替换一个文本/代码块。更具体地说,举个例子,假设我有3个句子(我个人有更多的句子,大约1000个不同的句子需要替换): 英文文本1、英文文本2、英文文本3。 并且想要同时将所有3个
如何使用PDFBox2.0找到和替换PDF文档中的文本,他们拉出了旧的示例,它的语法不再有效,所以我想知道这是否仍然可能,如果是,最好的方法是什么。谢了!
问题内容: 我有一个文件(更具体地说是一个log4j配置文件),我希望能够读取该文件并在代码中挑选出某些行并替换它们。例如,在文件中,有一串文本,指示文件的存储目录或记录器的级别。我希望能够替换这些文本字符串而无需读入文件,将其写入另一个文件以及删除原始文件。有没有一种使用Java来查找和替换文件中文本的更有效方法? 这是我尝试使用的文本文件的示例: 我希望能够读取文件并将’DEBUG’替换为另一
我正在学习powershell,并尝试编写一个脚本,通过字符串查找目录中的文件,然后对找到的文件进行查找和替换。我想将文件列表存储为一个变量,然后循环遍历文件并替换特定的字符串。这是我的脚本和错误,如果你有任何想法,它将非常感谢。谢谢! 错误 Get-Content:无法将参数绑定到参数“path”,因为它为null。在C:\scripts\script.ps1:5 char:18+(Get-Co