将编写的列表导出为CSV文件

2024-04-26 17:18:20 发布

您现在位置:Python中文网/ 问答频道 /正文

此代码

for record in SeqIO.parse(open(file, 'rU'), 'fasta', generic_protein):
    record_id = re.sub(r'\d+_(\d+_\d\#\d+)_\d+', r'\1', record.id)

    if ( not reference_sequence ):
      reference_sequence = record.seq
      reference_name     = record_id
      #continue
    print ",".join([reference_name, record_id, compare_seqs(reference_sequence, record.seq)])

提供如下的终端输出

7065_8#1,8987_2#53,
7065_8#1,8987_2#58,
7065_8#1,8987_2#61,
7065_8#1,8987_2#62,E-G [246]
7065_8#1,8987_2#65,N-K [71],Y-D [223]

我想把这一行一行写进CSV,有什么建议吗?你知道吗


Tags: 代码nameinidforparseruopen
3条回答

您还可以将逗号分隔的字符串(以及引号)直接写入文件:

f = open("output.csv","w")
for record in SeqIO.parse(open(file, 'rU'), 'fasta', generic_protein):
  record_id = re.sub(r'\d+_(\d+_\d\#\d+)_\d+', r'\1', record.id)

  if ( not reference_sequence ):
    reference_sequence = record.seq
    reference_name     = record_id
    #continue
  csvrow =  '","'.join([reference_name, record_id, compare_seqs(reference_sequence, record.seq)])
  csvrow = '"'+csvrow+'"'
  print >>f, csvrow
f.close()

使用此方法,您可以打开文件并检查是否正在写入数据,即使脚本正在运行。你知道吗

您可以使用writerow保存您的输出,如下所示:

for record in SeqIO.parse(open(file, 'rU'), 'fasta', generic_protein):
    record_id = re.sub(r'\d+_(\d+_\d\#\d+)_\d+', r'\1', record.id)

if ( not reference_sequence ):
  reference_sequence = record.seq
  reference_name     = record_id
  #continue
line= ",".join([reference_name, record_id, compare_seqs(reference_sequence, record.seq)])
with open(csvfile, "w") as output:
    writer = csv.writer(output, lineterminator='\n')
    writer.writerow([line]) 

将所有记录打包到一个嵌套列表中(即,不使用print ','.join(...)而使用records.append([...])),然后可以使用writerows(records)将它们写入文件。不需要像'.'.join()那样做csv就是为你做的。你知道吗

为完整起见:

records = []
for record in SeqIO.parse(open(file, 'rU'), 'fasta', generic_protein):
    record_id = re.sub(r'\d+_(\d+_\d\#\d+)_\d+', r'\1', record.id)

    if ( not reference_sequence ):
      reference_sequence = record.seq
      reference_name     = record_id
      #continue
    records.append([reference_name, record_id, compare_seqs(reference_sequence, record.seq)])

with csv.writer(open('file.csv', 'w')) as fp:
    fp.writerows(records)  # note that it's not writerow but writerows which allows you to write muptiple rows

相关问题 更多 >