Python-获取io.BufferedRandom,但应为文件对象

Python-获取io.BufferedRandom,但应为文件对象,python,csv,file-io,zipfile,Python,Csv,File Io,Zipfile,我有一个URL列表。我对它们进行迭代,并为每个URL下载每个.zip文件并保存它。然后,我需要将此文件放入字典,但我想跳过所有以#开头的行。(我通过在文件上放置一个过滤器解决了一个类似的问题,但我不能在这里使用这种方法。)下面是我的代码: 1. for link in urls: 2. affy_reader = {} 3. 4. # get_data() downloads the file, saves it as a .csv.zip, and 5.

我有一个URL列表。我对它们进行迭代,并为每个URL下载每个.zip文件并保存它。然后,我需要将此文件放入字典,但我想跳过所有以
#
开头的行。(我通过在文件上放置一个
过滤器解决了一个类似的问题,但我不能在这里使用这种方法。)下面是我的代码:

1. for link in urls:
2.        affy_reader = {}
3. 
4.        # get_data() downloads the file, saves it as a .csv.zip, and
5.        # returns a pointer to the file.
6.
7.        n = get_data(link)
8.        z = zipfile.ZipFile(n)
9.
10.       # only want the .csv from the archive
11.       for name in z.namelist():
12.            if '.csv' in name:  
13.                print('Writing - ' +name)
14.                fp = open(name, 'wb+')  
15.                fp.write(z.read(name)) 
16.                fp.close()
17.
18.                with(open(fp, 'r')) as f:                  # open file A to read only
19.                   with(open('temp.txt', 'w+')) as file_p: # open file B to read AND write
20.                        for row in f:
21.                            if not row.startswith('#'):
22.                                file_p.write(row)
23.                   file_p.close()
26.                   affy_reader = csv.DictReader(fd,
27.                                                delimiter='\t',
28.                                                fieldnames=affy_column_headers)
30.                   for x in affy_reader:
31.                       print(x)
如您所见,在第18行中,我尝试打开原始文件A,只写出我想要另一个文件B的行,然后尝试将B加载到
DictReader
。以下是我返回的错误:

TypeError: invalid file: <_io.BufferedRandom name='HG-U133A.na33.annot.csv'>
TypeError:无效文件:

因此,我从
fp=open(name'wb+')
中得到的信息看起来像一个字符串缓冲区,而不是一个文件。但是,表示我应该从
open()
获取
文件对象。那么如何将这个缓冲区放入文件中呢?或者,更好的是,我只是错过了一些步骤?谢谢

我不知道这是否只是将代码从程序传输到此处的错误,但在第16行,我认为您希望调用
fp.close()
,而不是简单地包含函数的空引用。在我的源代码中也是这样。我将其更改为
fp.close()
,但运行我的程序得到了相同的结果。奇怪的是,解释器不会抱怨我需要
()
…使用上下文管理器(with语句)的意义在于它会关闭文件本身。在第26行,fd来自哪里?编辑:我认为这是fp的输入错误。如果是,则关闭fp。当你试图使用它时,它是无效的。这是一个打字错误,你是对的。我确实关闭了fp,但我在第18行再次打开它……不是吗?我想我还是喜欢。