2017-07-03 79 views
0

我是Python的初學者,我有點卡在一個小問題上。我想從文本文件中刪除一些列和字符串。它是製表符分隔的。 第一個文件叫做A.TXT從txt文件中刪除列

chr1_1792868_SNP Bcin01g04980 NON_SYNONYMOUS NON_SYNONYMOUS[T](gene:Bcin01g04980|transcript:Bcin01g04980.1|P->S:225) C T C/C C/C C/C C/C C/C C/T 234 233 232 219 233 221 234 233 232 219 233 23 0 0 0 0 0 198 

和輸出文件(姑且稱之爲B.txt)應該是這樣的:

1 1792868 Bcin01g04980 C T C/C C/C C/C C/C C/C C/T 234 233 232 219 233 221 234 233 232 219 233 23 0 0 0 0 0 198 

所以會執行不同的操作:

  • 卸下「CHR」和「_」的第一列
  • 拆分1「CHR」和數字後的字符串後在2分不同的列
  • 刪除所有列3,4

我試圖到目前爲止做:

with open ('A.txt', 'r') as mutmut_mutants: 
     dble_mut = csv.reader(mutmut_mutants, delimiter='\t') 
     with open('B.txt', 'w+') as mutants_coo: 
      mut_coo= csv.writer(mutants_coo) 
      for i in dble_mut: 
       del i[2] 
       del i[3] 
       mut_coov.writerow(i) 

但是,大的驚喜,它不工作。而且我不會將第一個字符串分成兩列。任何人有關於如何進行的想法?

非常感謝!

+0

「不工作」表示錯誤信息?或者文件內容錯誤? – doctorlove

回答

1

你可以試試這個:

f = open('data.txt').readlines() 

f = [i.strip('\n').split() for i in f] 

new_data = [] 

for i in f: 
    data1 = i[0].split("_") 
    new = data1[0][-1]+" "+data1[1]+" " 

    new += i[1]+" " 

    new += ' '.join(i[4:]) 

    new_data.append(new) 
print new_data[0] 

輸出:

'1 1792868 Bcin01g04980 C T C/C C/C C/C C/C C/C C/T 234 233 232 219 233 221 234 233 232 219 233 23 0 0 0 0 0 198' 
+0

如果它是一個很大的文件,可能一次只能做一行......但是。 – doctorlove

+0

@doctorlove你是什麼意思?我相信這個解決方案會遍歷文件的每一行。 – Ajax1234

+0

我的意思是讀:'.readlines()'將整個文件存儲在內存中 - 如果它很大,它們會很麻煩,但是如果它在f中的for line中,你的解析仍然可以工作。解析似乎是在OP中的問題,我只是指出,閱讀整個文件可能會導致麻煩 – doctorlove

0

可能的解決辦法:

with open('A.txt', 'r') as f: 
    data=f.read() 

columns = data.split('\t') 
result = [] 

temp = columns[0].split('_') 
result.append(temp[0][-1]) 
result.append(temp[1]) 

result.extend(columns[4:]) 

print result 
+0

感謝您的解決方案!我不知道extend()方法,非常整潔:) – Wpierrick

+0

@Wpierrick如果它幫助你,你可以upvote答案;) –

+0

我做了upvoted,但因爲我是一個新用戶,聲譽低於15,它沒有顯示但已考慮在內;) – Wpierrick

0

所以感謝上面提供的代碼(感謝@ Ajax1234和@doctorlove) ,我在列表中設法得到了我想要的。我在將文件妥善保存到文件中時遇到了一些麻煩。我希望它被製表符分隔,並將列表中的每個元素作爲新行。 該代碼是

f = open('mutmut_mutants.txt').readlines() 

f = [i.strip('\n').split() for i in f] 

new_data = [] 

for i in f: 
    data1 = i[0].split("_") 
    new = data1[0][-1]+" "+data1[1]+" " 

    new += i[1]+" " 

    new += ' '.join(i[4:]) 

    new_data.append(new) 
print new_data 

outfile = open("test.txt", "w") 
print >> outfile, "\t".join(str(i) for i in new_data) 
outfile.close() 

我NEW_DATA列表看起來像這樣:

['1 1792868 Bcin01g04980 CTC/CC/CC/CC/CC/CC/T 234 233 232 219 233 221 234 233 232 219 233 23 0 0 0 0 0 198','1 1792869 CTC/CC/TC/TC/TC/TC/T 240 236 233 220 232 220 240 96 66 80 30 25 0 140 166 140 202 194',' 2 19718 Bcin02g00005 CAC/AC/AC/AC/AC/AC/A 86 51 78 84 87 108 63 38 58 60 63 86 22 13 20 24 24 22','....','....', '...']

並在文本文件中的輸出看起來不錯,只是有沒有在列表中的每個元素的末尾新行:

1 1792868 Bcin01g04980 CTC/CC/CC/CC/CC/CC/T 234 233 232 219 233 221 234 233 232 219 233 23 0 0 0 0 0 198 1 1792869 Bcin01g04980 ...

感謝您的幫助!