从文本文件写入文本文件 python
write text file from text files python
我有 3 个输出文件,分别包含 x、y、z 坐标
file1.txt(仅包含 x)|文件 2 (Y) |文件 3 (Z)
2.113
3.023
-7.234
...
和包含坐标数据的父 pdb 文件。我只想从 pdb 文件中提取与 file1、file2 中的 x、y、z 坐标匹配的那些行,file3.The pdb 文件行是;
原子 1 O5' G A 93 -12.706 19.299 0.129 1.00 0.00 O
粗体值将是我复制整行的匹配条件。
1- 我如何合并三个输出文件以生成一个文件,该文件可以在一行中提供 x、y、z 坐标以与我的脚本一起使用。
final_file = [文件 1, 文件 2, 文件 3] ?
2- 我如何根据匹配标准提取分数;
def read_convex_points(final_file,parent_pdb):
with open("output.txt","w") as f1:
with open(final_file) as f2:
with open(parent_pdb) as f3:
for line1 in f2:
for line2 in f3:
if line1 in line2:
f1.write(line2)
return
final_file = "file1.txt"
parent_pdb = "original.pdb"
read_convex_points(final_file,parent_pdb)
我写了类似的功能,但如果条件不起作用。
您可以像这样合并文件:
def merge(paths):
with open(paths[0]) as f1, open(paths[1]) as f2, open(paths[2]) as f3:
try:
yield next(f1), next(f2), next(f3)
except StopIteration:
return
for x, y, z in merge((file1, file2, file3)):
# check if matching
需要注意的是,这是假设文件长度相等,因此它会在遇到最短文件时停止。这可能是可以接受的。
这是将 Python 中的多个文件粘贴在一起的一种方法。它可以处理任意数量的输入文件,但就像 Peter 的解决方案一样,如果文件的行数不同,它会在最短的文件用完行时停止。
输出文件中的字段由 delimiter
字符串分隔,默认情况下为 space。
def paste(sources, dest, delimiter=' '):
fsrc = [open(fname, 'r') for fname in sources]
fdest = open(dest, 'w')
for t in zip(*fsrc):
outline = delimiter.join([line.strip() for line in t]) + '\n'
fdest.write(outline)
for f in fsrc:
f.close()
fdest.close()
paste(('file1', 'file2', 'file3'), 'final_file')
我有 3 个输出文件,分别包含 x、y、z 坐标
file1.txt(仅包含 x)|文件 2 (Y) |文件 3 (Z)
2.113
3.023
-7.234
...
和包含坐标数据的父 pdb 文件。我只想从 pdb 文件中提取与 file1、file2 中的 x、y、z 坐标匹配的那些行,file3.The pdb 文件行是;
原子 1 O5' G A 93 -12.706 19.299 0.129 1.00 0.00 O
粗体值将是我复制整行的匹配条件。
1- 我如何合并三个输出文件以生成一个文件,该文件可以在一行中提供 x、y、z 坐标以与我的脚本一起使用。
final_file = [文件 1, 文件 2, 文件 3] ?
2- 我如何根据匹配标准提取分数;
def read_convex_points(final_file,parent_pdb):
with open("output.txt","w") as f1:
with open(final_file) as f2:
with open(parent_pdb) as f3:
for line1 in f2:
for line2 in f3:
if line1 in line2:
f1.write(line2)
return
final_file = "file1.txt"
parent_pdb = "original.pdb"
read_convex_points(final_file,parent_pdb)
我写了类似的功能,但如果条件不起作用。
您可以像这样合并文件:
def merge(paths):
with open(paths[0]) as f1, open(paths[1]) as f2, open(paths[2]) as f3:
try:
yield next(f1), next(f2), next(f3)
except StopIteration:
return
for x, y, z in merge((file1, file2, file3)):
# check if matching
需要注意的是,这是假设文件长度相等,因此它会在遇到最短文件时停止。这可能是可以接受的。
这是将 Python 中的多个文件粘贴在一起的一种方法。它可以处理任意数量的输入文件,但就像 Peter 的解决方案一样,如果文件的行数不同,它会在最短的文件用完行时停止。
输出文件中的字段由 delimiter
字符串分隔,默认情况下为 space。
def paste(sources, dest, delimiter=' '):
fsrc = [open(fname, 'r') for fname in sources]
fdest = open(dest, 'w')
for t in zip(*fsrc):
outline = delimiter.join([line.strip() for line in t]) + '\n'
fdest.write(outline)
for f in fsrc:
f.close()
fdest.close()
paste(('file1', 'file2', 'file3'), 'final_file')