0

テキストファイルからいくつかの座標(最大20.000を追加できます)をインポートしたいと思います。これらの座標は、次のようにリストに追加する必要があります。

coords = [[0,0],[1,0],[2,0],[0,1],[1,1],[2,1],[0,2],[1,2],[2,2]]

ただし、座標をインポートしたい場合、次のエラーが発生しました。

invalid literal for int() with base 10

座標を正しくインポートする方法がわかりません。なぜこれが機能しないのか誰かが何か提案がありますか?整数の作成には問題があると思います。次のスクリプトを使用します。

Bronbestand = open("D:\\Documents\\SkyDrive\\afstuderen\\99 EEM - Abaqus 6.11.2\\scripting\\testuitlezen4.txt", "r")
headerLine = Bronbestand.readline()
valueList = headerLine.split(",")

xValueIndex = valueList.index("x")
#xValueIndex = int(xValueIndex)
yValueIndex = valueList.index("y")
#yValueIndex = int(yValueIndex)

coordList = []

for line in Bronbestand.readlines():
    segmentedLine = line.split(",")
    coordList.extend([segmentedLine[xValueIndex], segmentedLine[yValueIndex]])

coordList = [x.strip(' ') for x in coordList]
coordList = [x.strip('\n') for x in coordList]

coordList2 = []
#CoordList3 = [map(int, x) for x in coordList]

for i in coordList:
    coordList2 = [coordList[int(i)], coordList[int(i)]]

print "coordList = ", coordList
print "coordList2 = ", coordList2
#print "coordList3 = ", coordList3

インポートする必要のある座標は次のようになります(これはスクリプトの「Bronbestand」です)。

id,x,y,
      1,  -1.24344945,   4.84291601
      2,  -2.40876842,   4.38153362
      3,  -3.42273545,    3.6448431
      4,  -4.22163963,   2.67913389
      5,   -4.7552824,   1.54508495
      6,  -4.99013376, -0.313952595
      7,   -4.7552824,  -1.54508495
      8,  -4.22163963,  -2.67913389
      9,  -3.42273545,   -3.6448431

したがって、スクリプトの結果は次のようになります。

[[-1.24344945, 4.84291601],[-2.40876842, 4.38153362],[-3.42273545, 3.6448431],[-4.22163963, 2.67913389],[-4.7552824, 1.54508495],[-4.99013376,-0.313952595],[-4.7552824, -1.54508495],[-4.22163963, -2.67913389],[-3.42273545, -3.6448431]]

また、ネイティブのpython csvパーサーを使用して座標をインポートしようとしましたが、これも機能しませんでした。

よろしくお願いします!

4

2 に答える 2

5

数値は整数ではないため、int への変換は失敗します。

int(i) の代わりに float(i) を使用して、代わりに浮動小数点数に変換してみてください。

>>> int('1.5')

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    int('1.5')
ValueError: invalid literal for int() with base 10: '1.5'
>>> float('1.5')
1.5
于 2013-01-13T13:25:19.460 に答える
4

他の回答では、スクリプトが失敗する理由が示されていますが、ここには別の問題があります。車輪を大幅に再発明しています。

このすべては、csvモジュールリスト内包表記を使用して数行で実行できます。

import csv

with open("test.csv") as file:
    data = csv.reader(file)
    next(data)
    print([[float(x) for x in line[1:]] for line in data])

私たちに与えます:

[[-1.24344945, 4.84291601], [-2.40876842, 4.38153362], [-3.42273545, 3.6448431], [-4.22163963, 2.67913389], [-4.7552824, 1.54508495], [-4.99013376, -0.313952595], [-4.7552824, -1.54508495], [-4.22163963, -2.67913389], [-3.42273545, -3.6448431]]

ファイルを開き、csv.reader()csv ファイルを解析するために a を作成し、ヘッダー行をスキップしてから、浮動小数点数として解析された数値のリストを作成し、最初の列を無視します。

コメントで指摘されているように、大量のデータを扱っているため、データを遅延して繰り返し処理したい場合があります。リストを作成することは出力をテストするのに適していますが、一般的には、リストではなくジェネレーターが必要になるでしょう。例えば:

([float(x) for x in line[1:]] for line in data)

このジェネレーターを使用している間は、ファイルを開いたままにしておく必要があることに注意してください (withブロック内に留まります)。

于 2013-01-13T13:26:28.203 に答える