我的 python 脚本在执行时将值打印到打开它的 excel 文档的单列中



在执行简单的检查后,我一直在尝试将行从csv(逗号分隔)复制到另一个csv文件。但是,新创建的输出恰好位于单个列中。我该如何解决这个问题?我已经尝试使用 excel 中的文本解决方案迁移值,但没有积极的结果。我在块引号中提供的是一个示例 csv 输入,它将位于 ~400mb 文件中,如果满足条件,则需要在将给定条件复制到第二个文件之前读取给定条件。

"Glyma0022s00420.1,1932,1932,1,5.397348971,9.108346736,13.06778834,13.60298787,0.77651741,0.117442453,11.76078538,8.366009655,10.94107876,12.25047115,0.985502816,0.938466273,11.36138317,9.161105262,15.77093455,14.41819843,0.727405702,0.019170303,12.43972822,16.69100507,0.714607056,0.403279462,"

OSI,rcom,",gi|225423945|ref|XP_002279093.1|预测:假设的蛋白质[Vitisvinifera],没有命中,"tr|B9ST04|B9ST04_RICCO DNA结合蛋白,>假定的OS=Ricinus communisGN=RCOM_0353100 PE=4 SV=1","PF01426,PF05641",无,无,AT1G68580.1,无,agenet含结构域蛋白/溴邻源(BAH)含结构域蛋白,PF01426|PF05641 BAH域名|老年网域名

这将是示例输入

#!/usr/bin/env 
import csv
from sys import argv
script, filename = argv
def pvalueselection(file_in, file_out):
    header = True
    for line in file_in:
        line_split = line.split(',')
        if(header):
            file_out.writerow([line])
            header = False
            continue
        else:
            if float(line_split[9]) <=0.05 or float(line_split[15])<=0.05 or float(line_split[21]) <=0.05 or float(line_split[25])<=0.05:
                file_out.writerow([line])
def main():
    file_in = open(filename, 'rb')
    file_out = open ("output.csv",'wb') 
    csv_out = csv.writer(file_out,dialect='excel',delimiter=',')
    pvalueselection(file_in,csv_out)
    file_in.close()
    file_out.close()        
if __name__ == '__main__': main()   

file_out.writerow([line])将创建一个只有一个元素的列表例如

In [1]: test = "1,2,3,4,5,6,7"
In [2]: list_test = [test]
Out[2]: ['1,2,3,4,5,6,7']
In [6]: len(list_test)
Out[6]: 1

您需要的是分隔符分隔元素的列表。在代码中line.split(",")后使用列表会返回这样的列表,使用拆分将解决问题,例如在下面的代码中

In [1]: test = "1,2,3,4,5,6,7"
In [2]: list_test = test.split(",")
In [3]: print list_test
out:   ['1', '2', '3', '4', '5', '6', '7']
#now use the writerow method to write the list
file_out.writerow(list_test)

参考文档包含有关用法的更多示例https://docs.python.org/3/library/csv.html

你的代码看起来不错。为什么说它只在一列中打开?这可能是您在 excel 中的默认分隔符(我想默认情况下是一个空格/制表符)。

在 excel 中打开 csv 并转到数据>文本到列,选择"逗号"作为分隔符,然后按完成。

代码似乎很好。

您可以尝试更改为:

 csv_out = csv.writer(file_out,dialect='excel',delimiter='t')

或其他分隔符,例如";"

最新更新