2

infile に以下が含まれているとします。

aaaaaaa"pic01.jpg"bbbwrtwbbbsize 110KB
aawerwefrewqa"pic02.jpg"bbbertebbbsize 100KB
atyrtyruraa"pic03.jpg"bbbwtrwtbbbsize 190KB

出力ファイルを次のように取得する方法:

pic01.jpg 110KB
pic02.jpg 100KB
pic03.jpg 190KB

私のコードは次のとおりです。

with open ('test.txt', 'r') as infile, open ('outfile.txt', 'w') as outfile:
    for line in infile:
        lines_set1 = line.split ('"')
        lines_set2 = line.split (' ')
        for item_set1 in lines_set1:
            for item_set2 in lines_set2:
                if item_set1.endswith ('.jpg'):
                    if item_set2.endswith ('KB'):
                            outfile.write (item_set1 + ' ' + item_set2 + '\n')                

私のコードの何が問題なのですか、助けてください! 問題はここで解決されました: Python で書かれたコードの何が問題なのか

4

3 に答える 3

3

Python には素晴らしい文字列ライブラリがあるため、多くの場合、正規表現なしで文字列操作の問題を解決できます。あなたの場合、str.split異なる区切り文字(引用符とスペース)で2回呼び出すだけで問題が解決します

デモ

>>> st = """aaaaaaa"pic01.jpg"bbbwrtwbbbsize 110KB
aawerwefrewqa"pic02.jpg"bbbertebbbsize 100KB
atyrtyruraa"pic03.jpg"bbbwtrwtbbbsize 190KB"""
>>> def foo(st):
    #Split the string based on quotation mark
    _, fname, rest = st.split('"')
    #from the residual part split based on space
    #and select the last part
    rest = rest.split()[-1]
    #join and return fname and the residue
    return ' '.join([fname, rest])

>>> for e in st.splitlines():
    print foo(e)


pic01.jpg 110KB
pic02.jpg 100KB
pic03.jpg 190KB
于 2013-09-07T15:25:54.560 に答える
3

正規表現の方が簡単です:

with open ('test.txt', 'r') as infile, open ('outfile.txt', 'w') as outfile:
    for line in infile:
        m = re.search('"([^"]+)".*? (\d+.B)', line)
        if m:
            outfile.write(m.group(1) + ' ' + m.group(2) + '\n')
于 2013-09-07T15:28:31.117 に答える
1

正規表現を使用できますが、str.rsplitここでは、コードはこの単純なタスクにはやり過ぎのようです:

>>> import re
>>> strs = 'aaaaaaa"pic01.jpg"bbbwrtwbbbsize 110KB\n'
>>> name = re.search(r'"(.*?)"', strs).group(1)
>>> size = strs.rsplit(None, 1)[-1]
>>> name, size
('pic01.jpg', '110KB')

また

>>> name, size = re.search(r'"(.*?)".*?(\w+)$', strs).groups()
>>> name, size
('pic01.jpg', '110KB')

文字列の書式設定を使用します。

>>> "{} {}\n".format(name, size) #write this to file
'pic01.jpg 110KB\n'
于 2013-09-07T15:17:30.657 に答える