Python在目录中读取文件

时间:2012-07-31 10:18:29

标签: python python-2.7

我有一个.csv,包含2行中的3000行数据,如下所示:

uc007ayl.1  ENSMUSG00000041439
uc009mkn.1  ENSMUSG00000031708
uc009mkn.1  ENSMUSG00000035491

在另一个文件夹中,我有一个名称如下的图表:

uc007csg.1_nt_counts.txt
uc007gjg.1_nt_counts.txt

您应该注意到这些图表的名称与我的第1列的格式相同

我正在尝试使用python识别那些有图表的行,并在新的.txt文件中打印第二列的名称

这些是我的代码

import csv
with open("C:/*my dir*/UCSC to Ensembl.csv", "r") as f:
reader = csv.reader(f, delimiter = ',')
    for row in reader:
        print row[0]

但就我而言,我被困住了。

5 个答案:

答案 0 :(得分:3)

你几乎就在那里:

import csv
import os.path
with open("C:/*my dir*/UCSC to Ensembl.csv", "rb") as f:
    reader = csv.reader(f, delimiter = ',')
    for row in reader:
        graph_filename = os.path.join("C:/folder", row[0] + "_nt_counts.txt")
        if os.path.exists(graph_filename):
            print (row[1])

请注意,重复调用os.path.exists可能会降低进程的速度,尤其是当目录位于远程文件系统上且文件数量远远少于CSV文件中的行数时。您可能希望改为使用os.listdir

import csv
import os

graphs = set(os.listdir("C:/graph folder"))
with open("C:/*my dir*/UCSC to Ensembl.csv", "rb") as f:
    reader = csv.reader(f, delimiter = ',')
    for row in reader:
        if row[0] + "_nt_counts.txt" in graphs:
            print (row[1])

答案 1 :(得分:1)

首先,尝试查看print row[0]是否确实提供了正确的文件标识符。

其次,使用row[0]连接文件的路径,并使用os.path.exists(path)检查此完整路径是否存在(实际上是否存在)(请参阅http://docs.python.org/library/os.path.html#os.path.exists)。

如果它退出,您可以将行[1](第二列)写入带f2.write("%s\n" % row[1]的新文件(首先,您必须打开f2进行写作)。

答案 2 :(得分:0)

那么,下一步是检查文件是否存在?有几种方法,但我喜欢EAFP方法。

try:
   with open(os.path.join(the_dir,row[0])) as f: pass
except IOError:
   print 'Oops no file'

the_dir是文件所在的目录。

答案 3 :(得分:0)

result = open('result.txt', 'w')
for line in open('C:/*my dir*/UCSC to Ensembl.csv', 'r'):
    line = line.split(',')
    try:
        open('/path/to/dir/' + line[0] + '_nt_counts.txt', 'r')
    except:
        continue
    else:
        result.write(line[1] + '\n')
result.close()

答案 4 :(得分:0)

import csv
import os

# get prefixes of all graphs in another directory
suff = '_nt_counts.txt'
graphs = set(fn[:-len(suff)] for fn in os.listdir('another dir') if fn.endswith(suff))

with open(r'c:\path to\file.csv', 'rb') as f:
    # extract 2nd column if the 1st one is a known graph prefix
    names = (row[1] for row in csv.reader(f, delimiter='\t') if row[0] in graphs)
    # write one name per line
    with open('output.txt', 'w') as output_file:
        for name in names:
            print >>output_file, name