2012-03-15 75 views
0

專家你好,我在尋找使閱讀文本文件的循環,然後輸出(8)用下面的代碼的文本文件:迭代與Python中的變量2.7

for i in range(1,9): 
    with open(inputgui, 'r') as input1: 
     junkinfo = [next(input1) for dummy in range(22)] 
     with open(output, 'w') as output1: 
      for line in input1: 
       columns = line.strip().split() 
       output1.write('{:8}{:8}\n'.format(columns[1], columns[i+1])) 

注意變量inputgui是來自用戶的文本變量,輸出是來自用戶的文本變量。例如,gui中的用戶將選擇'C:/Data.txt',並且想要命名輸出並重復8次以生成'C:/NewData1.txt''C:/NewData2.txt'等。如何將變量output設置爲迭代或最有效的方式?

+0

由於這是有道理的。我意識到我將字符串和整數組合在一起,這是錯誤的大時間。 – guiNachos 2012-03-15 23:13:39

回答

4

假設用戶提供的文件名擴展名爲.txt,你可以這樣做:

for i in range(1,9): 
    with open(inputgui, 'r') as input1: 
     junkinfo = [next(input1) for dummy in range(22)] 

     newOutput = output[:-4] + str(i) + output[-4:] 

     with open(newOutput, 'w') as output1: 
      for line in input1: 
       columns = line.strip().split() 
       output1.write('{:8}{:8}\n'.format(columns[1], columns[i+1])) 

如果擴展名是未知的,你將需要找到的。並根據其位置進行拼接

3

其他答案沒有提到它,但是可以使用list函數使代碼更高效並且Pythonic。

# Change 
junkinfo = [next(input1) for dummy in range(22)] 

# To 
junkinfo = list(input1)[:22] 

# or even better... 
junkinfo = list(input1) 

如果您不需要將其修剪爲22個元素,則可以使用最後一個元素。

1

這裏是你如何可以爲任意的文件擴展名創建輸出文件的名稱:

output_file = (str(i) + '.').join(output.rsplit('.', 1)) 

例如:

>>> output = r'C:\Some.File.Name.data' 
>>> for i in range(1, 4): 
...  print (str(i) + '.').join(output.rsplit('.', 1)) 
... 
C:\Some.File.Name1.data 
C:\Some.File.Name2.data 
C:\Some.File.Name3.data