web-dev-qa-db-ja.com

Pythonファイルから文字列を読み取り、値に分割します

次の形式のファイルがあります。

995957,16833579
995959,16777241
995960,16829368
995961,50431654

各行を読みたいが、値を適切な値に分割したい。たとえば、最初の行は次のように分割されます。

x = 995957
y = 16833579

あなたがそれを読んだときに文字列であり、私はそれらをintに変換して分割したいので、これをどのように正確に行うのですか?助けていただければ幸いです。

ありがとう!

10
Paul

このようなもの-文字列変数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

整数であるxyを割り当てて、必要なことを実行できるようになりました。

15
icyrock.com

私は次のようなことをします:

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 で推奨されます。処理中に例外が発生した場合でもファイルが正しく閉じられるようにするためです。

16
Ken

ファイルにはopen(file, mode)を使用します。このモードは、読み取り用の「r」、書き込み用の「w」、および場合によってはバイナリファイルを開くために「b」を追加したもの(「rb」など)の変形です。以下のリンクを参照してください。

openreadline()または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'>

python io docs

pythonキャスティング

10
jdprc06
>>> [[int(i) for i in line.strip().split(',')] for line in open('input.txt').readlines()]
[[995957, 16833579], [995959, 16777241], [995960, 16829368], [995961, 50431654]]
3
kev