从文本文件中在python中递归打开文件

时间:2014-06-12 00:05:03

标签: python recursion file-io

我写的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文件中每一行末尾的换行符有什么关系吗?

2 个答案:

答案 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;

您尝试打开一个名为&#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;)需要去除换行符,这在大多数行中都有用(可能在最后一行中丢失)一个)。

获得的经验:仔细阅读错误消息

错误消息通常很好地解释了原因。

  1. 从底部开始
  2. 一步一步走,直到从您编写的代码中的语句中得出错误
  3. 尽力了解,错误信息的确切含义是什么。
  4. 如果需要,试着想象一下,情况是如何在逻辑上将最底层的错误与你编写的代码行连接起来的。
  5. 如果我们习惯了他们有点奇怪的谈话方式,我们可能会更快地发现问题。