0

我昨天刚开始学习 python 脚本,我已经被卡住了。:(

所以我有一个数据文件,其中包含各个领域的许多不同信息。

格式基本上像...

Name (tab) Start# (tab) End# (tab) 我需要的一堆字段,但对重复没有任何作用

我需要编写一个带有开始和结束数字的脚本,并根据另一个字段是+还是-来相应地添加/减去一个数字。

我知道我可以用这样的东西替换单词:

x = open("infile")
y = open("outfile","a")
while 1:
  line = f.readline()
  if not line: break
  line = line.replace("blah","blahblahblah")
  y.write(line + "\n")
y.close()

但是我查看了各种不同的地方,我无法弄清楚如何从每一行中提取特定字段、读取一个字段并更改其他字段。我读到您可以将这些行读入数组,但似乎不知道该怎么做。

任何帮助都会很棒!

编辑:

此处数据中的一行示例:(每个|代表一个制表符)

            |          |
            V          V
chr21 | 33025905 | 33031813 | ENST00000449339.1 | 0 | **-** | 33031813 | 33031813 | 0 | 3 | 1835,294,104, | 0,4341,5804,
chr21 | 33036618 | 33036795 | ENST00000458922.1 | 0 | **+** | 33036795 | 33036795 | 0 | 1 | 177,          | 0,

第二列和第三列(用箭头表示)将是我需要阅读/更改的列。

4

1 回答 1

2

您可以使用csv进行拆分,尽管对于此类问题,我通常只使用str.split

with open(infile) as fin,open('outfile','w') as fout:
   for line in fin:
       #use line.split('\t'3) if the name of the field can contain spaces
       name,start,end,rest = line.split(None,3)  
       #do something to change start and end here.
       #Note that `start` and `end` are strings, but they can easily be changed
       #using `int` or `float` builtins.
       fout.write('\t'.join((name,start,end,rest)))

csv如果你想像这样分割线很好:

this is a "single argument"

进入:

['this','is','a','single argument']

但这里似乎不需要。

于 2012-09-21T19:05:08.183 回答