1

私はPythonを初めて使用し、プログラマーではありません。私はこれを持っています:

y1990=open('Documents/python/google-python-exercises/babynames/baby1990.html', 'r', encoding='utf8')
y1992=open('Documents/python/google-python-exercises/babynames/baby1992.html', 'r', encoding='utf8')
y1994=open('Documents/python/google-python-exercises/babynames/baby1994.html', 'r', encoding='utf8')
y1996=open('Documents/python/google-python-exercises/babynames/baby1996.html', 'r', encoding='utf8')
y1998=open('Documents/python/google-python-exercises/babynames/baby1998.html', 'r', encoding='utf8')
y2000=open('Documents/python/google-python-exercises/babynames/baby2000.html', 'r', encoding='utf8')
y2002=open('Documents/python/google-python-exercises/babynames/baby2002.html', 'r', encoding='utf8')
y2004=open('Documents/python/google-python-exercises/babynames/baby2004.html', 'r', encoding='utf8')
y2006=open('Documents/python/google-python-exercises/babynames/baby2006.html', 'r', encoding='utf8')
y2008=open('Documents/python/google-python-exercises/babynames/baby2008.html', 'r', encoding='utf8')

もっと簡潔なコードを書きたいので、次のように考えました。

path='Documents/python/google-python-exercises/babynames/baby'
years=[year for year in range(1990,2010,2)]
open(path+str(years[0])+'.html') # works

一方で

'y'+str(years[0]) #works fine and creates string 'y1990'

しかし、私がしようとすると

'y'+str(years[0])=open(path+str(years[0])+'.html')
  File "<stdin>", line 1
SyntaxError: can't assign to operator

ご覧のとおり、変数名を作成してファイルを動的に開こうとしています。これらの行に沿って複数の方法を試しましたが、すべて同様のエラーが発生します。同様の問題を扱っている他の 投稿も見つけましたが、答えが私の状況をどのように解決するかわかりません (Python の経験が不足している可能性があります)。リストや辞書が良いと言う人がいますが、これは私の問題にも当てはまりますか? これを解決するにはどうすればよいですか?これは正しいPythonの方法ですか?

4

4 に答える 4

1

必要なのは辞書です:

years = {}
for year in range(1990, 2010,2):
    years[year] = open('Documents/python/google-python-exercises/babynames/baby{y}.html'.format(y=year), 'r', encoding='utf8')

それはうまくいくはずです。

次のようにデータにアクセスできます。

years[1990] or
years[1992]
于 2014-07-02T18:09:22.597 に答える
1

これは、プログラマーでないと説明が難しいですが、ここでの問題は、動的な変数名を使用できないことです。コードの先頭ビットの名前 (例: y1992) は、コード内で明示的に記述する必要があります。これは、次のようなことをすることを意味します

y199 + 2 = ...
y199 + 4 = ...

Python(または私が知っている他のプログラミング言語)では合法ではありません。

幸いなことに、後で簡単にアクセスできるように、複数のものを格納できるデータ構造が存在します。この場合、開いているファイルの束を保存しようとしています。listPython では、またはを使用できますdict。list は、インデックス 0、1、2 などを介してアクセスできる順序付けられたコレクションですが、dict はkeyを介してアイテムにアクセスできるコレクションです。

リストの使用は次のようになります

myfiles = []  #create an empty list
myfiles.append(open(path+str(years[0])+'.html'))
myfiles.append(open(path+str(years[1])+'.html'))
...
print(myfiles[1])

辞書の使用は次のようになります

myfiles = {} #create an empty dict
myfiles[years[0]] = open(path+str(years[0])+'.html')
myfiles[years[1]] = open(path+str(years[1])+'.html')
...
print(myfiles["y1992"])

これらは両方とも、私が表す個々のステートメントの束を持つ代わりに、ループを使用してより簡潔にすることができます...

ループを使用した dict の例:

myfiles = {} #create an empty dict
for year in years:
    myfiles[year] = open(path+str(year)+'.html')
print(myfiles["y1992"])
于 2014-07-02T18:12:44.593 に答える
0

このスレッドで他の人の入力を読んだ後、私が思いついた解決策は次のとおりです。

path='/home/monorhesus/Documents/python/google-python-exercises/babynames/baby'
keys=[year for year in range(1990,2010,2)]
values=[open(path+str(year)+'.html').read() for year in years]
files=dict(zip(keys, values))

同じ問題を抱えている可能性がある人のために: 最初の行はパス名を含む文字列を生成し、2 行目は辞書キーを作成するリスト内包表記であり、3 行目は辞書値を作成するリスト内包表記です (.read に注意してください。実際のファイル ダンプ)、最後のものは 2 つのリストから辞書を作成します。

于 2014-07-03T05:13:24.157 に答える