【问题标题】:All outputs from function are the same函数的所有输出都是相同的
【发布时间】:2019-10-23 21:11:35
【问题描述】:

我有一个读取 VCF 文件的功能

def readVCF(VCF):
    VCF = VCF.readlines()
    header = [] 
    data = []
    for line in VCF:
        if line.startswith('#'):
            header.append(line) 
        else:
            data.append(line)
    VCF_contents =[]  
    for line in data:
        VCF_contents.extend(line.strip().split('\t'))
    for i in range(0, len(VCF_contents), 10): 
        lines.append(VCF_contents[i : i+10]) 

该功能按我的意愿工作,但是当我多次使用它时就会出现问题。

我想在不同的文件上多次使用这个函数,并同时使用所有这些不同文件的输出。我一直在使用这样的功能:

VCF = open("frogs.txt", 'r')
lines = []
readVCF(VCF)
frogs = lines
VCF.close

VCF = open("rabbits.txt.", 'r')
readVCF(VCF)
rabbits = lines
VCF.close

VCF = open("lizards.txt", 'r')
readVCF(VCF)
lizards = lines
VCF.close

问题是,我的所有输出都是相同的,并且都有来自frogs.txt 的输出,这是我使用该函数的第一个文件。如何在不获取相同值的情况下重用这个函数?

【问题讨论】:

  • 你的函数没有返回任何东西,那么lines应该是什么?
  • @OferSadan 道歉,现在无关紧要,因为我已经理解了我的问题。
  • 您需要在调用函数之前使用lines = [] 或在函数开头使用lines[:] = [] 语句清除函数正在使用的lines 列表的内容。跨度>
  • 您不喜欢使用专用的 VCF 库,例如PyVCF ?

标签: python list function vcf-variant-call-format


【解决方案1】:

可能,您要添加:

lines = []

在你的函数的开头和:

return lines

在你的函数的末尾,并像这样调用它:

VCF = open("frogs.txt", 'r')
frogs = readVCF(VCF)
VCF.close()

或者(可能更好):

with open("frogs.txt", 'r') as VCF:
    frogs = readVCF(VCF)

【讨论】:

    猜你喜欢
    • 2012-06-24
    • 2019-12-17
    • 2023-03-18
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多