python - 打开 csv 作为整数列表

标签 python csv integer

我是一个试图自学 Python 的新手。我有一个文件,里面有一堆数字,我想将它们作为整数“导入”到Python列表中(或者至少我认为我想做的)。我似乎遇到了问题,但我不明白它是什么。以下是有关我的问题和我尝试过的代码的一些详细信息:

我有一个 DNA 序列(例如约 150,000 个字母的字符串),我想让 python 转到该字符串中的某个位置,然后打印该位置左侧的 150 个字母,即该位置的字母用方括号括起来,然后是该位置右侧的 150 个字母。我需要对字符串中 >100 个位置执行此操作。我在一个单独的文件中列出了这些职位。我发现 Biopython 有一个对象可以为我处理很长的字符串,如果我告诉 python 我想要什么位置(例如手动分配它),我可以对该字符串进行切片并获得正确的输出。现在我希望能够从另一个文件导入我的目标位置,然后让 python 迭代地遍历该列表并将输出打印到另一个文件。第一部分是我遇到一些麻烦的地方。

我尝试了几种不同格式的输入文件。像这样的一个:

500,1000,15000

还有一个像这样的(所有位置都在单独的行上):

500

1000

15000

根据我读过的其他一些帖子,我尝试了几件事。这是其中之一:

from Bio import SeqIO
import csv

with open('Results.fa', 'a') as f1:
    Reference = SeqIO.read("GEO5FinalAssembly2SC.fa", "fasta") # Biopython
    DataFile = open('TestFile.csv', 'r')
    DataReader = csv.reader(DataFile)
    SNP = []
    for row in DataReader:
        SNP.append(row)
    for i in SNP:
        IA=i-151  #Creating the intervals
        IB=i-1
        JA=i+1
        JB=i+151
        Fragment = Reference.seq[IA:IB] + "[" + Reference.seq[i] + "]" + Reference.seq[JA:JB]
        F = str(Fragment)      #Need to turn Fragment into a string that can be written
        header = ">MINT_SNP" + str(i) + "\n"
        f1.write(header)
        f1.write(F)
        f1.write("\n")

这会返回错误:

Traceback (most recent call last):
  File "./ReferenceSplitter3.py", line 15, in <module>
    IA=i-151  #Creating the intervals
TypeError: unsupported operand type(s) for -: 'list' and 'int'

我也尝试过这个:

from Bio import SeqIO
import csv

with open('Results.fa', 'a') as f1:
    Reference = SeqIO.read("GEO5FinalAssembly2SC.fa", "fasta")
    with open('TestFile.txt', 'r') as Input:
        rows = csv.reader(Input, quoting=csv.QUOTE_NONNUMERIC)
        SNP = [[item for number, item in enumerate(row)] for row in rows]       
    for i in SNP:
        IA=i-151  #Creating the intervals
        IB=i-1
        JA=i+1
        JB=i+151
        Fragment = Reference.seq[IA:IB] + "[" + Reference.seq[i] + "]" + Reference.seq[JA:JB]
        F = str(Fragment)      #Need to turn Fragment into a string that can be written
        header = ">SNP" + str(i) + "\n"
        f1.write(header)
        f1.write(F)
        f1.write("\n")

这会产生类似的错误:

Traceback (most recent call last):
  File "./ReferenceSplitter4.py", line 13, in <module>
    IA=i-151  #Creating the intervals
TypeError: unsupported operand type(s) for -: 'list' and 'int'

但是,当我自己定义一个整数列表(如 SNP = (500,1000,1500))时,它似乎工作得很好。我想知道我是否在这里遗漏了一些基本的 python 概念。抱歉,如果这是一个非常基本的问题,但任何建议将不胜感激!

最佳答案

对于在同一行上以逗号分隔的输入 (500,1000,10000),您可以使用以下方式读取:

SNP = next(DataReader)

对于它们各自位于不同行的输入,请执行以下操作:

SNP = []
for row in DataReader:
    SNP.append(row[0])

SNP 设置为数字列表,例如 [500, 1000, 15000],然后您可以进行迭代。

关于python - 打开 csv 作为整数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14736347/

相关文章:

python - 通过重复 2D numpy 数组中的值创建 4D numpy 数组

python - python中包的全局变量可以被认为是邪恶的吗?

Python 3 DictWriter csv BytesIO 类型错误

python - 提取 csv 文件特定列以在 Python 中列出

javascript - 整数的 localeCompare

python - Django如何为模型属性自动生成唯一的数字/字符串

python - 或者正则表达式中文字字符串的条件

python - 通过列的部分字符串匹配来过滤 csv 文件

javascript - 如何在 Math.pow(10, 10000000) 中获取整数

java - 为什么 Integer 在 Java 中不代表 NaN?