【发布时间】:2014-06-10 01:24:25
【问题描述】:
我想用另一个文件中的一列替换一个文件中的一列。我正在尝试使用 sed 在 python 中执行此操作,但我不确定我是否正确执行此操作。也许代码会让事情更清楚:
20 for line in infile1.readlines()[1:]:
21 element = re.split("\t", line)
22 IID.append(element[1])
23 FID.append(element[0])
24
25 os.chdir(binary_dir)
26
27 for files in os.walk(binary_dir):
28 for file in files:
29 for name in file:
30 if name.endswith(".fam"):
31 infile2 = open(name, 'r+')
32
33 for line in infile2.readlines():
34 parts = re.split(" ", line)
35 Part1.append(parts[0])
36 Part2.append(parts[1])
37
38 for i in range(len(Part2)):
39 if Part2[i] in IID:
40 regex = '"s/\.*' + Part2[i] + '/' + Part1[i] + ' ' + Part2[i] + '/"' + ' ' + phenotype
41 print regex
42 subprocess.call(["sed", "-i.orig", regex], shell=True)
这就是打印正则表达式的作用。系统在 sed 过程中似乎挂起,因为它会在那里停留很长一段时间而没有做任何事情。
"s/\.*131006/201335658-01 131006/" /Users/user1/Desktop/phenotypes2
感谢您的帮助,如果您需要进一步说明,请告诉我!
【问题讨论】:
-
如果您拥有 Python 的全部功能,您确定要使用
sed吗? -
说实话,我看不出如何在 Python 中做到这一点。我使用 Sed 的原因是我正在处理的表型文件有 9 列,我只想替换第一个而不覆盖整个文件。
-
试试
Python Regular Expressions- docs.python.org/2/library/re.html。例如re.sub()方法...你需要一个例子吗? -
@AndreiBoyanov 一个例子将不胜感激。感谢您指出 re.sub()!
-
不相关:使用
for line in infile2:而不是for line in infile2.readlines():
标签: python bash sed subprocess