我写的python脚本的前几行看起来像这样:
#!/usr/bin/env python
import os
import sys
import subprocess
import csv
import itertools
fin=open("filelist.txt",'r')
print(fin)
for line in fin:
TARG_FILE = open('fin', 'r')
spamreader = csv.reader(TARG_FILE, delimiter='\t')
for line in spamreader:
print(line[0:6])
其中filelist.txt是与脚本位于同一目录中的文本文件。如果我将fin放在引号中,函数将返回:
File "VCFParser.py", line 13, in <module>
TARG_FILE = open('fin', 'r')
IOError: [Errno 2] No such file or directory: 'fin'
但如果我没有引号,我得到:
Traceback (most recent call last):
File "VCFParser.py", line 11, in <module>
TARG_FILE = open(fin, 'r')
TypeError: coercing to Unicode: need string or buffer, file found
我怀疑问题与here找到的问题非常相似:
但是,我无法使用那里的信息让脚本工作。
如果我打印(fin),它会返回相应的文件路径以供阅读:
print(fin)
16.31235000.31366000/vcfBeta-GS000012109-ASM.vcf.gz.summary.txt
我在这里缺少什么?
它与filelist.txt文件中每一行末尾的换行符有什么关系吗?
答案 0 :(得分:2)
您的问题是您正在将文件对象传递到open
函数,而不是您刚刚打开的文件中的字符串。
for line in fin:
TARG_FILE = open('fin', 'r')
需要替换为
for line in fin:
TARG_FILE = open(line, 'r')
您的line
变量引用了filelist.txt
中的每一行,而不是fin
。
答案 1 :(得分:0)
这两个错误的原因都很清楚。
您尝试打开一个名为&#39; fin&#39;它不见了。
要open
,您必须提供文件名。您正在传入文件描述符,这会导致错误。
万一,你的&#34; filelist.txt&#34;文件名有行,你可能想打开该行的mofied内容:
#!/usr/bin/env python
import os
import sys
import subprocess
import csv
import itertools
with open("filelist.txt",'r') as fin:
for line in fin:
fname = line.strip("\n")
with open(fname, "r") as TARG_FILE:
spamreader = csv.reader(TARG_FILE, delimiter='\t')
for line in spamreader:
print(line[0:6])
`strong.strip(&#34; \ n&#34;)需要去除换行符,这在大多数行中都有用(可能在最后一行中丢失)一个)。
错误消息通常很好地解释了原因。
如果我们习惯了他们有点奇怪的谈话方式,我们可能会更快地发现问题。