2013-03-01 69 views
1

那麼,我在Python腳本中遇到問題,我需要做的是拆分函數的索引隨循環的每次迭代自動增加。我這樣做:在Python中增加拆分索引

tag = "\'" 
while loop<=302: 
     for line in f1.readlines(): 
      if tag in line: 
       word = line.split(tag)[num] #num is the index I need to increase 

     text = "Word: "+word+"." 

     f.write(text) 

     num = num + 1 
     loop = loop + 1 

但是...索引上的「num」變量不會改變......它只是保持不變。 num索引表示我需要採取的詞。所以這就是爲什麼「num = num + 1」將不得不增加...

循環中的問題是什麼?

謝謝!

+8

我有一點很難理解。你可以放一個簡短的(2-3行)示例輸入文件,然後輸出該文件的預期輸出? – mgilson 2013-03-01 18:10:50

+0

輸入文件是純文本,包含單引號之間的單詞,用逗號分隔。輸出文件是包含單詞的其他純文本:分割的第一個單詞,單詞:分割的第二個單詞等... – Benyi 2013-03-01 18:17:05

回答

0

你的問題很混亂。但我認爲你想將num = num + 1轉換爲for循環和if語句。

tag = "\'" 
while loop<=302: 
    for line in f1.readlines(): 
     if tag in line: 
      word = line.split(tag)[num] #num is the index I need to increase 
      num = num + 1 

    text = "Word: "+word+"." 

    f.write(text) 
    loop = loop + 1 
+0

擊敗我!是的,我認爲這看起來像他/她想要的。 – verbsintransit 2013-03-01 18:14:52

+0

我敢打賭,像這樣的東西,但它有可能增加應該在if語句之外。只是一個瘋狂的猜測。 – JHolta 2013-03-01 18:16:47

+0

謝謝大家,問題是因爲num = num + 1,在if之外。 – Benyi 2013-03-01 18:24:37

0

根據Benyi在這個問題上的評論 - 你是否想要這個單獨的句子?你可能不需要索引。

>>> mystring = 'hello i am a string' 
>>> for word in mystring.split(): 
     print 'Word: ',word 


Word: hello 
Word: i 
Word: am 
Word: a 
Word: string 
0

這似乎有很多錯誤。
首先

while loop <= 302: 
    for line in f1.readlines(): 

f1.readlines()會是[]每次迭代過去的第一

for line in f1.readline(): 
    word = line.split(tag)[num] 
    ... 
text = "Word: "+word+"." 

即使你做的for循環工作,text總會正在使用word的最後一次迭代。也許這是期望的行爲,但這似乎很奇怪。

while loop<=302: 
    ... 
    loop = loop += 1 

似乎將由於循環不使用在所有的範圍內更好的寫法如下

for _ in xrange(302): 

。這是假設循環從0開始,如果不是,那麼你只需將302調整爲你想要的迭代次數。

最後

num = num + 1 

這是您的內環之外,因此NUM將永遠是第一次迭代相同,如前所述則不會因爲空f1.readlines()的事後者。

0

我有一個不同的方法來解決你在評論中提到的問題。考慮input.txt中有如下條目:

this is a an input file. 

然後下面的代碼會給你所需的輸出

lines = [] 
with open (r'C:\temp\input.txt' , 'r') as fh: 
    lines = fh.read() 

with open (r'C:\temp\outputfile.txt' , 'w') as fh1: 
    for words in lines.split(): 
     fh1.write("Words:"+ words+ "\n")