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()単一の文字列としてファイル全体の内容をつかんでいます。次に、特定の行ではなく、その文字列全体の文字にインデックスを付けます。上記のコードでは、一度に1行ずつインデックスを作成しています。

また、これはURLであり、1つのセクションのみに関心があるため、この.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

試す:

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

「split」と「splitline」を調べます。これらは、URLなどの標準テキストを分割するときに役立ちます。それぞれについて詳しくは、http: //docs.python.org/library/stdtypes.htmlをご覧ください。

そのリストには、あなたにも役立つかもしれないpartitions()に関するいくつかの情報も含まれています。データの保存方法に関するいくつかのオプションを考えると、文字列と区切り文字が必要です。

于 2012-08-10T19:35:36.540 に答える