0

我在一个文本文件中有一堆 URL,但我只对 URL 的一部分感兴趣,我想将该部分保存到另一个文档中。我已经设法一次读取 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()

但我无法将其移植到 for 循环中:

from sys import argv
script, sol = argv

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

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


data.close()

我试图在屏幕上打印它,看看为什么会出错,但我只得到空行。我被困住了,我希望你能帮帮我。

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()

我已经设法做到了,但我只能将第一行保存在新文档中。其余部分打印在屏幕上,但未保存在新文档中

4

3 回答 3

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'
于 2012-08-10T19:27:16.203 回答
0

我会研究“split”和“splitline”,它们在分解标准文本(例如url)时很有用。您可以在这里了解更多信息:http: //docs.python.org/library/stdtypes.html

该列表还将包含有关 partitions() 的一些信息,这些信息也可能对您有用。它需要一个字符串和分隔符,为您提供一些关于如何存储数据的选项。

于 2012-08-10T19:35:36.540 回答
0

尝试:

for line in indata.splitlines():
    print indata[51:85]
于 2012-08-10T19:25:39.720 回答