ファイルを読み取って、各行のセルをコンマで分割し、緯度と経度に関する情報を含む最初と2番目のセルのみを表示しようとしています。これはファイルです:
時間、緯度、経度、type2015-03-20T10:20:35.890Z、8.8221664、-122.7649994、earthquake2015-03-20T10:18:13.070Z、.2073333、-116.6891667、earthquake2015-03-20T10:15:09.000Z、62.242、-150.8769、earthquake
私のプログラム:
def getQuakeData():
filename = input("Please enter the quake file: ")
readfile = open(filename, "r")
readlines = readfile.readlines()
Type = readlines.split(",")
x = Type[1]
y = Type[2]
for points in Type:
print(x,y)
getQuakeData()
このプログラムを実行しようとすると、エラーが発生します
「AttributeError: 'list'オブジェクトには属性 'split'がありません
私を助けてください!
ここで実際にあなたはより広い混乱を持っていると思います。
最初のエラーは、行のリスト全体でsplit
を呼び出そうとしていることです。split
は文字列のリストではなく、文字列のみです。そのため、すべてではなく、split
各行にする必要があります。
そして、あなたはfor points in Type
、およびそれぞれのpoints
が新しいx
およびy
を提供することを期待しています。しかし、それは起こりません。 Types
はx
とy
の2つの値であるため、最初のpoints
はx
になり、次にポイントはy
、それで完了です。そのため、各行をループして、単一のx
をループするのではなく、各行からy
およびTypes
値を取得する必要があります。単一の行から。
そのため、すべてがファイル内のすべての行でループ内に入り、split
をx
とy
に1行ごとに1回実行する必要があります。このような:
def getQuakeData():
filename = input("Please enter the quake file: ")
readfile = open(filename, "r")
for line in readfile:
Type = line.split(",")
x = Type[1]
y = Type[2]
print(x,y)
getQuakeData()
補足として、理想的にはclose
ステートメントを使用して、ファイルをwith
する必要がありますが、最後に説明します。
興味深いことに、ここでの問題は、初心者になりすぎているということではなく、専門家が行うのと同じ抽象的な方法で問題を解決しようとしているだけで、まだ詳細がわからないことです。これは完全に実行可能です。暗黙的に行うのではなく、機能のマッピングについて明示する必要があります。このようなもの:
def getQuakeData():
filename = input("Please enter the quake file: ")
readfile = open(filename, "r")
readlines = readfile.readlines()
Types = [line.split(",") for line in readlines]
xs = [Type[1] for Type in Types]
ys = [Type[2] for Type in Types]
for x, y in Zip(xs, ys):
print(x,y)
getQuakeData()
または、それを書くためのより良い方法は次のとおりです。
def getQuakeData():
filename = input("Please enter the quake file: ")
# Use with to make sure the file gets closed
with open(filename, "r") as readfile:
# no need for readlines; the file is already an iterable of lines
# also, using generator expressions means no extra copies
types = (line.split(",") for line in readfile)
# iterate tuples, instead of two separate iterables, so no need for Zip
xys = ((type[1], type[2]) for type in types)
for x, y in xys:
print(x,y)
getQuakeData()
最後に、NumPyとPandasを見てください。これらのライブラリは、doを使用して、データの配列全体またはフレーム全体に機能をほぼ同じ方法で暗黙的にマッピングする方法を提供します。
問題は、readlines
が文字列のリストであり、それぞれがfilename
の行であるということです。おそらくあなたは:
for line in readlines:
Type = line.split(",")
x = Type[1]
y = Type[2]
print(x,y)