python - 合并2个文本文件并在python中创建一个新文件
问题描述
我有 2 个大文本文件,例如以下小示例。有 2 个文件 ( major and minor
)。在major
和minor
文件中都有 4 列。在主文件中,10000 中第 2 列和第 3 列之间的差异以及第 2 列和第 3 列之间的差异是 32 或 31 或接近 31 但不是那么高的数字。
主要文件的小例子:
chr4 530000 540000 0.0
chr4 540000 550000 1719.0
chr4 550000 560000 0.0
次要文件的小例子:
chr4 295577 295608 12
chr4 323326 323357 10
chr4 548873 548904 32
chr4 548873 548904 20
chr4 549047 549078 32
chr4 549047 549078 20
chr4 549137 549168 32
chr4 549137 549168 20
chr4 549181 549212 32
chr4 549181 549212 20
chr4 549269 549300 22
chr4 549269 549300 381
chr4 549269 549300 67
chr4 549269 549300 89
chr4 549269 549300 95
chr4 549269 549300 124
chr4 549269 549300 149
chr4 549269 549300 87
chr4 549269 549300 33
chr4 549269 549300 65
chr4 549269 549300 68
chr4 549269 549300 190
chr4 549269 549300 20
chr4 549355 549386 32
chr4 549355 549386 20
chr4 549443 549474 16
chr4 705810 705841 10
chr4 846893 846924 28
我想制作一个新的文本文件,其中有 4 列。像预期的输出:
预期输出:
chr4 548873 548904 32 chr4 540000 550000
chr4 548873 548904 20 chr4 540000 550000
chr4 549047 549078 32 chr4 540000 550000
chr4 549047 549078 20 chr4 540000 550000
chr4 549137 549168 32 chr4 540000 550000
chr4 549137 549168 20 chr4 540000 550000
chr4 549181 549212 32 chr4 540000 550000
chr4 549181 549212 20 chr4 540000 550000
chr4 549269 549300 22 chr4 540000 550000
chr4 549269 549300 381 chr4 540000 550000
chr4 549269 549300 67 chr4 540000 550000
chr4 549269 549300 89 chr4 540000 550000
chr4 549269 549300 95 chr4 540000 550000
chr4 549269 549300 124 chr4 540000 550000
chr4 549269 549300 149 chr4 540000 550000
chr4 549269 549300 87 chr4 540000 550000
chr4 549269 549300 33 chr4 540000 550000
chr4 549269 549300 65 chr4 540000 550000
chr4 549269 549300 68 chr4 540000 550000
chr4 549269 549300 190 chr4 540000 550000
chr4 549269 549300 20 chr4 540000 550000
chr4 549355 549386 32 chr4 540000 550000
chr4 549355 549386 20 chr4 540000 550000
chr4 549443 549474 16 chr4 540000 550000
前 4 列来自minor file
,最后 3 列来自major file
。查看预期输出,2nd
和3rd
列(来自次要文件)中的数字在同一行的范围内,但是columns 6
7(来自主要文件)和第一列等于5th
列(实际上是主要和第一列的第一列)次要文件)。事实上,我想在次要文件中查找第一列等于主要文件第一列的行,2nd
并且3rd
同一行(在次要文件中)的列必须在一个范围2nd
内3rd
主要文件中的列。所以实际上,次要文件中的每一行都有 3 个条件有资格包含在输出文件中。最后 3 列来自主要文件,适合次要文件中的行。
我正在尝试在 python 中执行此操作并编写了以下代码,但它没有返回我所期望的:
major = open("major.txt", 'rb')
minor = open("minor.txt", 'rb')
major_list = []
minor_list = []
for m in major:
major_list.append(m)
for n in minor:
minor_list.append(n)
final = []
for i in minor_list:
for j in major_list
if minor_list[i] == major_list[j] and minor_list[i+1] <= major_list[j+1] and minor_list[i+2] >= major_list[j+2]:
final.append(i)
with open('output.txt', 'w') as f:
for item in final:
f.write("%s\n" % item)
解决方案
也许它是您的代码中的错字我可以看到您在 if minor_list[i] 中缺少一个选项卡
final = []
for i in minor_list:
for j in major_list
if minor_list[i] == major_list[j] and minor_list[i+1] <= major_list[j+1] and minor_list[i+2] >= major_list[j+2]:
final.append(i)
应该
final = []
for i in minor_list:
for j in major_list
if minor_list[i] == major_list[j] and minor_list[i+1] <= major_list[j+1] and minor_list[i+2] >= major_list[j+2]:
final.append(i)
推荐阅读
- unix - 使用 sed 命令从第 2 次替换到第 4 次出现
- laravel - 当我制作 PDF 时,错误是 Laravel 的 dompdf 中的“尝试访问类型为 null 的值的数组偏移量”
- r - 搜索 Scopus 搜索 API 时出错并将结果批量保存到 xml 文件中
- react-native - 错误:无法从`index.js`解析模块`react`:在项目中找不到react
- reactjs - 如何获取要在打字稿的图像 ID 列中作为值输入的上传图像的标题?
- performance - 使用 Jmeter 的吞吐量和响应时间
- python - python脚本在编写为函数时不起作用
- android - 错误:未设置 ANDROID_HOME 环境变量
- java - 如何使用捆绑将数据从片段传递到活动
- apache - 如何使用 apache 重写 URL