2012-08-10 20 views
0

我有一大堆的URL的文本文件,但我只在URL的一部分感興趣,我想那部分保存到另一個文檔。我maneged閱讀同時1號線,然後將其寫入文件中使用這樣的:複製從一個文本文檔中的文本行的一部分到新文檔

from sys import argv 
script, sol , save = argv 

data = open(sol) 
indata = data.read() 


result = indata[51:85] 
result2 = "http://mars.jpl.nasa.gov/msl-raw-images/msss/00003/mcam/" + result + ".jpg" 

output = open(save, 'w') 
output.write(result2) 

data.close() 
output.close() 

但我不能說成用於環路端口:

from sys import argv 
script, sol = argv 

data = open(sol) 
indata = data.read() 

for line in indata: 
    indata[51:85], 


data.close() 

我試着在屏幕上打印它看看爲什麼會出錯,但我只能得到empy線。我卡住了,我希望你能幫我一把。

from sys import argv 
script, sol, save = argv 

data = open(sol) 
indata = data.read() 

def get_line(): 
    for line in indata.splitlines(): 
     print indata[51:85] 

     result = indata[51:85] 
     result2 = "http://mars.jpl.nasa.gov/msl-raw-images/msss/00003/mcam/" + result + ".jpg" 

    output = open(save, 'w') 
    output.write(result2) 
    output.close() 

get_line()  
data.close() 

我已經設法做到這一點,但我只能保存新文檔中的第一行。其餘的都是印在屏幕上,但不保存新文檔

回答

1

編輯 控制流已關閉。您需要循環

result=...線可能有點混亂所以之前打開的文件,我將解釋它

首先它使用.replace在該行更改文本。然後它使用索引[:-4]刪除最後4個字符。最後,附加字符串「-br.jpg」整個事情

from sys import argv 
script, sol, save = argv 

def get_line(): 
    data = open(sol) 
    output = open(save, 'w') 
    for line in data: #for each line in the input file 
     result = line.replace('msl/multimedia/raw/?rawid=', 'msl-raw-images/msss/00003/mcam/')[:-4] + '-br.jpg\n' 
     output.write(result) 

    output.close() 
    data.close() 

get_line()  

你可以遍歷文件的行本身

from sys import argv 
script, sol = argv 

data = open(sol) 
for line in data: 
    print line[51:85] 

data.close() 

似乎更接近你想要什麼。

當你做.read()你正在抓取整個文件的內容作爲一個單一的字符串。那麼你正在索引整個字符串中的字符,而不是特定的行。在上面的代碼中,你一次一行地索引每行。

此外,由於這是一個URL,你只在一個部分感興趣,該.split方法可以使你更容易的索引。它返回一個字符串列表,通過在特定字符處分割原始字符串來完成。例如:

>>> line = 'stackoverflow.com/posts/11908027/' 
>>> line.split('/') 
['stackoverflow.com', 'posts', '11908027', ''] 
>>> line.split('/')[2] 
'11908027' 
>>> line.split('/')[1] 
'posts' 
+0

我在這裏嘗試了你的代碼,我也一樣。我是否必須創建另一個執行此循環的循環?例如,如果我有五個URL,那麼我是否必須創建另一個五次執行此操作的foor操作符? – marclluell 2012-08-10 20:19:12

+0

@marclluell不,這應該讀取所​​有五行,並做你想做的。你可以發佈其中一個輸入文件的內容嗎? – 2012-08-10 20:25:15

+0

現在我也得到一個全局錯誤,因爲indata沒有被定義 – marclluell 2012-08-10 20:42:06

0

嘗試:

for line in indata.splitlines(): 
    print indata[51:85] 
+0

看看帖子的編輯,你知道爲什麼會發生這種情況嗎? – marclluell 2012-08-10 19:53:51

0

我會去了解一下「分裂」和「分裂線」,打破最多時的標準文本,如URL哪些是有用的。你可以在這裏瞭解更多關於: http://docs.python.org/library/stdtypes.html

該列表還將有一些信息在分區()上,這些信息也可能對你有用。它需要一個字符串和分隔符,給你一些關於如何存儲數據的選項。

相關問題