【问题标题】:ERROR: variable name not defined错误:未定义变量名
【发布时间】:2015-09-05 11:49:08
【问题描述】:

我编写了以下代码,但我收到一条错误消息:未定义名称“acc”。我该如何解决?

 import csv

    with open(r"C:\Users\garfield\Python27\trial.txt") as file,     open(r"C:\Users\garfield\Python27\outp.csv", "a+") as f:
 x=file.read()
 m=x.split()
 writer = csv.writer(f, delimiter =",",quoting=csv.QUOTE_MINIMAL)
 for i in range(len(m)-1):
    if "ACCESSION" in m[i]:
        acc=m[i+1]
    if '/host' in m[i]:
        host1=m[i].split('/host')[1].split('\n')[0]
        host2=m[i+1]
        host=host1+" "+host2 
    if "5'UTR" in m[i]:
        utr=m[i+1]
    data=[acc,host,utr]
    writer.writerow(data)

【问题讨论】:

  • 您应该发布一个 MCVE,以便人们可以重现您的问题。但请确保为通向data=[acc,host,utr] 的所有路径定义了acc
  • 您是否要在 csv 中写入一行?
  • 你在那里做了一些奇怪的事情。您阅读了整个文件,然后将其拆分。那可能没有做你想做的事。然后你用ifs 检查这三个字符串,但如果在第一个m[i] 中没有找到它们中的任何一个,你就会得到那个错误。即使你没有,我也不确定这是否是你想要的,因为这些值会一直存在,直到找到另一个字符串(如果你使用字符串作为标志,这可能是有意义的)。

标签: python python-2.7 csv file-io


【解决方案1】:

从您的代码看来,您正在尝试解析完整的文件,从中创建 acc / utr / host 变量,然后将其写入 csv,对我来说它看起来像您想要的要写入的是 csv 中的单行,在处理完完整的输入文件之后,如果是这样,则行的缩进 -

data=[acc,host,utr]
writer.writerow(data)

错了,应该在for循环外缩进,而不是在循环内示例-

for i in range(len(m)-1):
    if "ACCESSION" in m[i]:
        acc=m[i+1]
    if '/host' in m[i]:
        host1=m[i].split('/host')[1].split('\n')[0]
        host2=m[i+1]
        host=host1+" "+host2 
    if "5'UTR" in m[i]:
        utr=m[i+1]
writer.writerow([acc,host,utr])            #there is no need for an extra variable here.

此外,您应该为所有三个变量设置一些默认值,以处理在文件中找不到特定行的情况。

【讨论】:

    猜你喜欢
    • 2017-08-12
    • 1970-01-01
    • 2015-01-25
    • 2018-05-03
    • 2014-04-25
    • 2021-04-10
    • 2011-12-21
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多