使用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()
当然,如果您需要验证前三个字符,您仍然需要正则表达式。所有这些答案都很好,但您可以检查原始答案的编辑和修订数量。谢谢