0

ここで本当に簡単な質問ですが、質問するのに十分長い間私を悩ませています。コードは次のようになります。

f4 = open("genomekey2.txt", 'rb')
keyline = f4.readline()
keygenomes = []
for keyline in f4:
   keygenomes.append(keyline[:-1])

ゲノムキー2.txtファイル形式は次のようになります

['Prochlorococcus marinus str. MIT 9202']
['Prochlorococcus marinus str. NATL1A']
['Synechococcus sp. RS9917']
['Nostoc sp. PCC 7120']
['Synechococcus sp. JA-2-3B'a(2-13)']

問題は、ゲノムキー リストを印刷すると、必要なすべてのエントリが含まれていますが、リスト内の各 [ ] が引用符で囲まれていることです。別のリストと比較できるように引用符を削除したいのですが、今のところ方法が見つかりません。私は試した...

for a in keygenomes:
    a.replace('"', '')

しかし、それはうまくいかなかったようです。引用符をまったく追加しないソリューションが望ましいです。とにかくそれらは何のためにあり、コードのどの部分 (.append、.readline()) がそれらを追加する責任がありますか? ここでは非常に初心者の質問ですが、皆さんはかなりいい人です。

編集:最終的には、そのようにフォーマットされたリストと比較したい

[['Arthrospira maxima CS-328']、['Prochlorococcus marinus str. MIT 9301']、['Synechococcus sp. CC9605']、['Synechococcus sp. WH 5701']、['Synechococcus sp. CB0205']、['プロクロロコッカス マリヌス str. MIT 9313']、['Synechococcus sp. JA-3-3Ab']、['Trichodesmium erythraeum IMS101']、['Synechococcus sp. PCC 7335']、['Trichodesmium erythraeum IMS101']、...

編集:だから、答えを組み合わせて何かをすることができたと思います。助けてくれてありがとう!引用符はリストの比較に干渉していたので、最初のリストにも追加しましたが、文字列として入力されているリストを模倣しているだけだと思います(現在、その区別を理解していると思います)動作しているようです

f4 = open("genomekey2.txt", 'rb')
keyline = f4.readline()
keygenomes = []
for keyline in f4:
    keygenomes.append(keyline[:-1])

specieslist = " ".join(["%s" % el for el in specieslist])

nonconservedlist = [i for i in keygenomes if i not in specieslist]

編集:ええ、上記は機能しましたが、問題をよりよく理解した後、ここで見つけたよりエレガントなソリューション(http://forums.devshed.com/python-programming-11/convert-string-to-list-71857.html)のおかげであなたのみんなの助けは次のようなものです:

for keyline in f4:
    keyline = eval(keyline)
    keygenomes.append(keyline)

ありがとう!

4

5 に答える 5

2

リストを比較したいものに基づいて、文字列のリストではなく、リストのリストが必要なようです....多分これですか?

f4 = open("genomekey2.txt", 'rb')
keygenomes = []
for keyline in f4.readlines():
    if keyline:
        keygenomes.append(eval(keyline.strip()))

次の行に問題が発生します。

['Synechococcus sp. JA-2-3B'a(2-13)']

引用符が正しくないため、評価が中断されます。引用符を混在させることは可能ですか? 代わりにこのように...

["Synechococcus sp. JA-2-3B'a(2-13)"]
于 2012-04-04T18:01:13.967 に答える
1

手っ取り早い解決策は、行の最初の 2 文字と最後の 2 文字をスキップすることです。

f4 = open("genomekey2.txt", 'rb')
keyline = f4.readline()
keygenomes = []
for keyline in f4:
   # CHANGE HERE
   keygenomes.append(keyline[2:-2])

それ以外の場合は、次のような正規表現を使用します

g = re.match(("^\['(?P<value>.*)'\]"), "['Synechococcus sp. JA-2-3B'a(2-13)']")
g.group(1)
"Synechococcus sp. JA-2-3B'a(2-13)"
于 2012-04-04T16:11:51.000 に答える
1

a.replace(...)変更された文字列を返します。変更はしませんa

したがって、配列内のエントリを実際に置き換えるか、配列に入れる前に修正する必要があります。

keygenomes = [ a.replace('"', '') for a in keygenomes ]

編集:

質問を十分に注意深く読んでいなかったと思い"ます-文字列を印刷すると発生します-それは文字列自体の一部ではありません。

于 2012-04-04T16:16:03.713 に答える
0

そのようなことを試してください:

keygenomes = []
f4 = open("genomekey2.txt", 'rb')
keyline = f4.readline()
for keyline in f4:
    keyline = keyline.strip()
    if keyline and keyline.startswith("['") and keyline.endswith("']"):
        keygenomes.append(keyline[2:-2])
于 2012-04-04T16:32:32.743 に答える
0

間違っreplaceた文字列を使用しています。一重引用符を削除しようとしていますが、文字列は二重引用符です。また、文字列は可変ではないため、置換は適切ではありません。戻り値を使用する必要があります。

keygenomes.append(keyline[:-1].replace("'", ""))
于 2012-04-04T16:16:55.020 に答える