0

次のような単語を含むファイルがあります。

IA45,TA43,WB58,AB71 ... etc

この単語を次のようにリストに変換したいと思います。

["IA45","TA43","WB58","AB71" .....]

次に、このリストを使用して、単語を 1 つずつ取得し、分割して、最初の文字、2 番目の文字、および数字を個別の変数として取得します。私は持っている:

with open("IRL.txt", "r") as f:
    resid_list = [x.split(',') for x in f.readlines()]
    for r in resid_list:
        chain = list(r)[1]
        print chain
        res = list(r)[0]
        print res
        num = list(r)[2:]
        num1 = "".join(num)
        res_num = res+num1
        print res_num+" "+chain

問題は for ループにあります。「chain」と印刷すると、2 番目の単語しか表示されず、他には何も表示されません ---> TA43

でも印刷したい --- A

4

3 に答える 3

2

次のようなものが欲しいと思います:

with open("IRL.txt", "r") as f:
    resid_list = [x for line in f.readlines() for x in line.split(',')]
    for r in resid_list:
        first = r[0]
        second = r[1]
        num = r[2:]
        # do something with those variables

現在のバージョンresid_listではリストのリストですが、文字列のフラットなリストが必要だと思います。

于 2013-06-18T19:35:36.343 に答える
1

for r in resid_listに変わるfor r in resid_list[0]

リスト内包表記を使用しているため、パラメーターは次のようになります。

In [9]: resid_list
Out[9]: [['IA45', 'TA43', 'WB58', 'AB71']]

つまり、リストのリスト

In [10]: resid_list[0]
Out[10]: ['IA45', 'TA43', 'WB58', 'AB71']

あなたが望むものを与えます。

于 2013-06-18T19:32:44.917 に答える
1

re.findallジェネレーター式で最初の一致を使用して取得できます

import re

line = 'IA45,TA43,WB58,AB71'
for fst, snd, nums in (re.findall('(.)(.)(\d+)', el)[0] for el in line.split(',')):
    print fst, snd, nums

I A 45
T A 43
W B 58
A B 71

行がどれだけ適切にフォーマットされているか/予測可能であるかによっては、次の方法で回避できる場合もあります。

for fst, snd, nums in re.findall('(.)(.)(\d+)', line):
    print fst, snd, nums
于 2013-06-18T19:46:12.180 に答える