正在进行的编辑有时会在稍后重新提交 正在进行编辑有时会在稍后重新提交 正在编辑的内容有时会在稍后重新提交
答案 0 :(得分:2)
您的问题可能已被其他人回答,但由于您处理的是非常大的文件,因此您应该使用generator方法逐行输入。
有关详细信息,请参阅此问题。 Lazy Method for Reading Big File in Python?
答案 1 :(得分:0)
在输入项目之前,您可以使用.strip()
删除项目周围的任何空格。这样可以更加清晰,并解决任何缩进问题。
例如:
b=a.split('chr').strip() # No white space either side now
c=b[1].split(':').strip() # No white space
d=c[1].split('..').strip()
e=b[0]+'\t'+c[0]+'\t'+d[0]+'\t'+d[1]+'\t'+'\n'
rfh.write(e)
这样做会删除所有现有空格,只允许\t
存在。
答案 2 :(得分:0)
为什么不使用regex拆分?
import re
with open(<infile>) as inf:
for annot_info in f:
split_array = re.split(r'(\W+)(chr\w+):(\d+)..(\d+)', annot_info)
#do your sql processing here.
#write out to a file if you wish to.
会给你['','+','chr6','140302505','140302604','']。您可以在当前的mysql方法中使用相同的方法。
PS:我使用的正则表达式模式会在开头和结尾给你空字符串。修改正则表达式或更改sql插入以在推送时排除数组的第一个和最后一个元素。
答案 3 :(得分:0)
这应该有效:
import re #Regex may be the easiest way to split that line
with open(infile) as in_f, open(outfile,'w') as out_f:
f = (i for i in in_f if i.rstrip()) #iterate over non empty lines
for line in f:
_, k = line.split('\t', 1)
x = re.findall(r'^1..100\t([+-])chr(\d+):(\d+)\.\.(\d+).+$',k)
if not x:
continue
out_f.write(' '.join(x[0]) + '\n')