2013-06-03 48 views
0

我想在Python 3.0中編寫代碼來逐行重新格式化數據文件。代碼讀取每行,將行轉換爲列表,然後讀取列表中的每個元素。然後修改每個列表元素並將其複製到輸出文件。有什麼辦法從Python列表中提取和打印一個原始/文字字符串

問題是,一些元素包含反斜槓字符,Python將解釋爲命令或無法解釋忽略。 Python中是否有任何方式來讀取和/或提取列表中的元素作爲原始字符串或文本字符串?

我的代碼是下面:

import shlex 
import sys 
import fileinput 
import string 
inputFile = list(open("inputfile.txt","r")) 
outputFile = open("outputFile.txt","a") 

for i in range(1,len(inputFile)): 
    print(inputFile[i]) 
    line = shlex.shlex(inputFile[i], posix = True) 
    line.whitespace = "\t" 
    line.whitespace_split = True 
    line = list(line) 
    for j in range(0,3): 
     cell = line[j] 
     cell_1 = cell.replace("\\","\\\\") 
     outputFile .write(("%s\t")%(cell_1)) 
    for k in range(4,len(line)): 
     cell = str(line[k]) 
     cell_1 = cell.replace(" | ","\t") 
     if cell_1 == "-": 
      outputFile .write("-\t-\t") 
     if cell_1 == "unknown": 
      outputFile .write("unknown\t-\t") 
     else: 
      outputFile .write(("%s\t")%(cell_1)) 

輸入的一個例子是: GA10034 7421353 7424287 FBgn0070093 DPSE \ GA10034蛋白水解|用InterPro從電子註釋推斷:IPR007484 - - - - 未知 - - - 肽酶活性|從電子註釋推斷用的InterPro:IPR007484 - - - - - -

和示例輸出線是: GA10034 7421353 7424287 DpseGA10034蛋白水解從電子註釋推斷用的InterPro:IPR007484 - - - - - - - - - - - - 未知 - - - - - - - - - - 使用InterPro從電子註釋推斷的肽酶活性:IPR007484 - - - - - - - - - -

輸出中刪除了\ \和GA10034 \之間的\。 (該腳本還在輸出中的每行新行的開始處添加了一個製表符 - 從第二行開始);並且無法解釋通過輸入文件的3/4的方式失敗,聲稱存在「沒有收盤價」;但我認爲最好一次解決一個問題)

+0

你可以添加一個輸入和所需輸出的例子嗎? –

+0

那麼...你的實際問題是什麼?預期產出是多少,與實際產出相比如何?如果您真正向我們展示您遇到的問題,您會獲得更多的關注。老實說,它看起來像你可能只是在推翻它。 –

回答

1

您的問題似乎是在創建解析器時指定posix = True,解析器會解釋反斜槓和引號。然而,這聽起來像你不想要這些行爲,所以你應該使用posix = False來代替。

+0

謝謝Gabe!這解決了這個問題。 – gwilymh