使用python在CSV中切片特定字符

使用python在CSV中切片特定字符,python,csv,numpy,Python,Csv,Numpy,我有制表符分隔格式的数据,如下所示: 0/0:23:-1.03,-7.94,-83.75:69.15 0/1:34:-1.01,-11.24,-127.51:99.00 0/0:74:-1.02,-23.28,-301.81:99.00 我只对每个条目的前3个字符感兴趣(即0/0和0/1)。我认为最好的方法是在numpy中使用match和genfromtxt。就我所知,这个例子是: import re csvfile = 'home/python/batch1.hg19.table

我有制表符分隔格式的数据,如下所示:

0/0:23:-1.03,-7.94,-83.75:69.15    0/1:34:-1.01,-11.24,-127.51:99.00    0/0:74:-1.02,-23.28,-301.81:99.00
我只对每个条目的前3个字符感兴趣(即0/0和0/1)。我认为最好的方法是在numpy中使用
match
genfromtxt
。就我所知,这个例子是:

import re
csvfile = 'home/python/batch1.hg19.table'
from numpy import genfromtxt
data = genfromtxt(csvfile, delimiter="\t", dtype=None)
for i in data[1]:
    m = re.match('[0-9]/[0-9]', i)
        if m:
        print m.group(0),
        else:
        print "NA",
这适用于第一行数据,但我很难弄清楚如何为输入文件的每一行扩展它


我应该将其设置为一个函数并分别应用于每一行,还是有一种更具python风格的方法来实现这一点?

不使用正则表达式解析整个文件非常容易:

for line in open('yourfile').read().split('\n'):
    for token in line.split('\t'):
        print token[:3] if token else 'N\A'

除非您真的想使用NumPy,否则请尝试以下方法:

file = open('home/python/batch1.hg19.table')
for line in file:
    for cell in line.split('\t'):
        print(cell[:3])

它只是遍历文件的每一行,使用制表符作为分隔符标记该行,然后打印要查找的文本片段。

Numpy在需要加载数字数组时非常有用。 这里的格式太复杂,numpy无法识别,因此只能得到一个字符串数组。这并不是真正发挥numpy的力量

这里有一个不用numpy的简单方法:

result=[]
with open(csvfile,'r') as f:
    for line in f:
        row=[]
        for text in line.split('\t'):
            match=re.search('([0-9]/[0-9])',text)
            if match:
                row.append(match.group(1))
            else:
                row.append("NA")
        result.append(row)
print(result)
屈服

# [['0/0', '0/1', '0/0'], ['NA', '0/1', '0/0']]
关于这些数据:

0/0:23:-1.03,-7.94,-83.75:69.15 0/1:34:-1.01,-11.24,-127.51:99.00   0/0:74:-1.02,-23.28,-301.81:99.00
---:23:-1.03,-7.94,-83.75:69.15 0/1:34:-1.01,-11.24,-127.51:99.00   0/0:74:-1.02,-23.28,-301.81:99.00

我已经有一段时间没有写python了。但我可能会这样写

file = open("home/python/batch1.hg19.table")
for line in file:
    columns = line.split("\t")
    for column in columns:
        print column[:3]
file.close()

当然,如果您需要验证前三个字符,您仍然需要正则表达式。

所有这些答案都很好,但您可以检查原始答案的编辑和修订数量。谢谢