请告诉我以下问题。我有csv文件,我想比较。第一个包含基因组中特定点的坐标(例如chr3:987654–987654)。其他csv文件包含基因组区域的坐标(例如chr3:135596–123456789)。我想交叉比较我的第一个文件与我的其他文件,看看是否有任何点的位置在第一个文件重叠的任何区域坐标在其他文件,并写入一个单独的文件这一套重叠。为了让事情简单的开始,我起草了一个简单的代码交叉比较两个csv文件。奇怪的是,我的代码运行并打印坐标,但没有将点坐标写入单独的文件。我的第一个问题是,如果我的方法(从我的代码)在比较这两个文件是最佳的还是有更好的方法做这件事?其次,为什么不写进一个单独的文件?你知道吗
import csv
Region = open ('Region_test1.csv', 'rt', newline = '')
reader_Region = csv.reader (Region, delimiter = ',')
DMC = open ('DMC_test.csv', 'rt', newline = '')
reader_DMC = csv.reader (DMC, delimiter = ',')
DMC_testpoint = open ('DMC_testpoint.csv', 'wt', newline ='')
writer_Exon = csv.writer (DMC_testpoint, delimiter = ',')
for col in reader_Region:
Chr_region = col[0]
Start_region = int(col[1])
End_region = int(col [2])
for col in reader_DMC:
Chr_point = col[0]
Start_point = int(col [1])
End_point = int(col[2])
if Chr_region == Chr_point and Start_region <= Start_point and End_region >= End_point:
print (True, col)
else:
print (False, col)
writer_Exon.writerow(col)
Region.close()
DMC.close()
有几件事是错误的,其中最重要的一点是,你从来没有检查,看看你的文件打开是否成功。最引人注目的是,你从来没有关闭你的作家。你知道吗
也就是说,这是一个难以置信的非最佳方式去进行的计划。文件I/O速度慢。你不想一直以阶乘的方式重读每件事。考虑到您的搜索需要所有可能的比较,您希望至少将两个文件中的一个完全存储在内存中,如果您不希望将两个完整的数据集都存储在内存中,则可能使用生成器/迭代器来替代另一个。你知道吗
如果两个集合都已加载,则继续进行交叉点检查
我建议您看看http://docs.python.org/2/library/csv.html如何使用csv读取器,因为您所做的事情似乎没有任何意义,因为列[0]、列[1]和列[2]不会是您所认为的那样。你知道吗
这些都是风格和可读性的东西,但是: 一些迭代变量的名称似乎有点不合适,
for col in ...
可能应该是for token in ...
,因为您是一个令牌一个令牌地处理,而不是一列一列地处理,等等另外,为变量选择一致的内容也不错,有时以大写开头,有时将大写保存在“\ux”之后
将“”放在对象和某些函数noames之间而不是其他函数之间也是非常奇怪的。但是这些不会改变代码的功能。你知道吗
相关问题 更多 >
编程相关推荐