次の形式のファイルがあります。
995957,16833579
995959,16777241
995960,16829368
995961,50431654
各行を読みたいが、値を適切な値に分割したい。たとえば、最初の行は次のように分割されます。
x = 995957
y = 16833579
あなたがそれを読んだときに文字列であり、私はそれらをintに変換して分割したいので、これをどのように正確に行うのですか?助けていただければ幸いです。
ありがとう!
このようなもの-文字列変数a
に読み込まれる各行に対して:
>>> a = "123,456"
>>> b = a.split(",")
>>> b
['123', '456']
>>> c = [int(e) for e in b]
>>> c
[123, 456]
>>> x, y = c
>>> x
123
>>> y
456
整数であるx
とy
を割り当てて、必要なことを実行できるようになりました。
私は次のようなことをします:
filename = "mynumbers.txt"
mynumbers = []
with open(filename) as f:
for line in f:
mynumbers.append([int(n) for n in line.strip().split(',')])
for pair in mynumbers:
try:
x,y = pair[0],pair[1]
# Do Something with x and y
except IndexError:
print "A line in the file doesn't have enough entries."
With-openは http://docs.python.org/tutorial/inputoutput.html で推奨されます。処理中に例外が発生した場合でもファイルが正しく閉じられるようにするためです。
ファイルにはopen(file, mode)
を使用します。このモードは、読み取り用の「r」、書き込み用の「w」、および場合によってはバイナリファイルを開くために「b」を追加したもの(「rb」など)の変形です。以下のリンクを参照してください。
open
をreadline()
またはreadlines()
とともに使用します。前者は一度に1行を返し、後者は行のリストを返します。
split(delimiter)
を使用して、コンマで分割します。
最後に、各アイテムを整数にキャストする必要があります:int(foo)
。下のリンクのように、キャストをtryブロックで囲み、その後にexcept ValueError
を続けます。
「複数の割り当て」を使用して、aとbを一度に割り当てることもできます。
>>>a, b = map(int, "2342342,2234234".split(","))
>>>print a
2342342
>>>type(a)
<type 'int'>
>>> [[int(i) for i in line.strip().split(',')] for line in open('input.txt').readlines()]
[[995957, 16833579], [995959, 16777241], [995960, 16829368], [995961, 50431654]]