python - for 循环仅从文件中读取第一行
问题描述
我有两个文件,第一个文件是项目列表,每行列出一个项目。第二个文件是一个 tsv 文件,每行列出了许多项目。因此,第二个文件中的某些行包含可能在第一个文件中列出的项目。我需要从第二个文件中生成一个行列表,其中可能包含第一个文件中列出的项目。
grep -f 对我来说很挑剔,所以我决定制作自己的 python 脚本。这就是我想出的:-
大列表是第二个文件,小列表是第一个文件。
def main():
desired_subset = []
small_list = open('tiny_list.txt','r')
big_list = open('big_list.tsv','r')
for i in small_list.readlines():
i = i.rstrip('\n')
for big_line in big_list:
if i in big_line:
if i not in desired_subset:
desired_subset.append(big_line)
print(desired_subset)
print(len(desired_subset))
main()
问题是 for 循环只读取第一行。有什么建议么?
解决方案
当您遍历文件时(此处 over big_list
),您“使用它,因此在第二次迭代中small_list
您没有任何东西留在. 尝试在主循环之前big_list
读取list 变量并big_list
使用它:.readlines()
for
def main():
desired_subset = []
small_list = open('tiny_list.txt','r')
big_list = open('big_list.tsv','r').readlines() # note here
for i in small_list.readlines():
i = i.rstrip('\n')
for big_line in big_list:
if i in big_line:
if i not in desired_subset:
desired_subset.append(big_line)
print(desired_subset)
print(len(desired_subset))
此外,您不要关闭文件,这是一种不好的做法。我建议使用上下文管理器(用with
语句打开文件):
def main():
desired_subset = []
with open('tiny_list.txt','r') as small_list,
open('big_list.tsv','r') as big_list:
small_file_lines = small_list.readlines()
big_file_lines = big_list.readlines()
for i in small_file_lines:
i = i.rstrip('\n')
for big_line in big_file_lines:
if i in big_line:
if i not in desired_subset:
desired_subset.append(big_line)
print(desired_subset)
print(len(desired_subset))
推荐阅读
- android - 在 sharedPref.getString 中有一个默认值有什么意义?
- python - 如何遍历返回二维数组的第三个数组维度
- c# - 如何将 SAML 身份验证添加到 MVC 应用程序
- c - 没有创建链接列表,为什么?[CS50 pset4]
- python - Nvidia Jetson Xavier Hello AI World,运行示例时出错
- typescript - 虚拟函数导致“错误 TS1109:预期表达式”。
- javascript - 控制台错误,需要删除特定字符
- groovy - Groovy RestClient POST 请求发送无效的 JSON
- typescript - 如何在没有任何或忽略的情况下使用 array.includes?
- spark-submit - 如何使用多个 CPU 进行火花提交