将文本行的一部分从文本文档复制到新文档中

时间:2012-08-10 19:21:27

标签: python

我在文本文件中有一堆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()

我试图在屏幕上打印出来,看看为什么会出错,但我只能使用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()

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

3 个答案:

答案 0 :(得分: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()时,您将整个文件的内容作为单个字符串抓取。那么你要在整个字符串中索引字符,而不是特定的行。在上面的代码中,您一次索引到每一行。

此外,由于这是一个网址,而您只对一个部分感兴趣,因此.split方法可以使您的索引更容易。它返回通过将原始字符串拆分为特定字符而生成的字符串列表。例如:

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

答案 1 :(得分:0)

尝试:

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

答案 2 :(得分:0)

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

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