我有一个包含我想替换的名称的文本字符串的文件。我有另一个包含两列的文件,A 和 B 包含名称。A 列包含与字符串(文件 1)中相同的名称。我基本上想用 B 列中的名称替换这些名称。我尝试过使用 Python,但我仍然是初学者,无法完成它。任何指针将不胜感激。
文件 1 NameA.....NameB....NameC....等 文件2 AB 姓名A 姓名D 姓名B 姓名E 名称C 名称F
想;
文件 1 NameD....NameE....NameF....等
with open('File1', 'r') as fd:
keys = fd.read().split()
name_map = {}
with open('File2', 'r') as fd:
for line in fd.readlines():
key, value = line.split()
name_map[key] = value
with open('File1', 'w') as fd:
new_names = []
for k in keys:
new_names.append(name_map[k])
fd.write(" ".join(new_names))
#read filrst file as list
with open("file1") as f:
names1=f.read().strip().split();
#read file2 as dictionary
with open("file2") as f:
names2=dict(i.strip().split() for i in f.readlines())
#write replacement in file3
with open("file3","w") as f:
f.write(" ".join(names2[i] for i in names1))
感谢您的回复。虽然,没有一个真的不能正常工作。可能是由于 file1 中字符串的性质(纽威克格式)。这是我最初的工作......可能不太好。虽然,如果我能让替换功能起作用,它可能会成功..?
import re
LineString = open("file1.txt", "r").read()
pattern = re.compile('\d+OTU\_\d+\_\w+\_\d+')
words = pattern.findall(LineString)
colA = []
colB = []
with open("file2.txt", "r") as f:
for line in f:
parts = line.split()
if len(parts) > 0:
colA.append(parts[0])
if len(parts) > 1:
colB.append(parts[1])
#Doesnt work
if words == colA:
LineString.replace(colA, colB)
文件1中的字符串看起来像:(((((((('1OTU_1_769_wint_446':0.00156420,'1OTU_1_822_wint_445':0.00000000)0.5700:0.00156410,'1OTU_1_851_wint_454':0.00000000)等...)
单词,colA,colB 看起来像:例如 1OTU_1_769_wint_446
我认为你需要这样的代码:
File1 = open("File1", "r")
File2 = open("File2", "r")
File3 = open("File3","w")
for line in File2:
A, B = line.strip().split('\t')
for line_string in File1:
line_string.replace(A,B)
File3.write('%s\n' % line_string)
File3.close()
我会考虑使用 RegEx(Python 中的 re 模块)。这将允许您创建可以搜索特定文本模式的函数。如果您正确构造 re.compile() 函数和 re.search() 函数,则可以使用 group() 函数提取文本的选择“组”。该库非常广泛,因此这里是文档的链接:
http://docs.python.org/2/library/re.html
我还会查看一个在线教程,例如这个: