2012-04-30 18 views
0

テキストファイルのエントリを作成、比較、読み込みするコードを書き始めました。 あなたの名前、あなたの年齢、身長をお尋ねします。私は仕事にこれを得ているが、私は、私はそれを閉じた後、バックのPythonにこの情報をロードする方法を見つけ出すことはできませんテキストドキュメントから情報を読み取る

Vincent,18,190

:それはそのようなのようなテキストファイルを作成します。私はloadを呼び出すようにして、それがすべてのテキストファイルのエントリをロードし、それらを表示するとします

Name:"name"
Age:"age"
Height:"height"

ホー私はこれを行うことができますか?

+0

どのようにファイルを作成したのですか? – pepr

答えて

4

例えば、あなたのファイルの行ごとに格納されている3つの項目があり、場合あなたが(これはまた、あなたのためのファイルを閉じます)この

with open('myData.txt') as infp: 
    for line in infp: 
     # process line 
     line = line.rstrip() 

よう

をあなたの以前に保存したテキストファイルを開くことができます

 name, age, height = line.split(',') 

と書くことができます(データが最初に保存されたときにコンマで区切られていると仮定します)。そして、あなたが指定した形式で出力します生成:データが格納されていた方法に応じ@peprによって指摘

 print 'Name:"%s"' %name 
     print 'Age:"%s"' %age 
     print 'Height:"%s"' %height 

などを(単語とコンマの間にスペースが)データに後続の空白を/リードする可能性がありますがsplit(',')によって生成される場合、余分な空白を取り除くにはstrip()を使用する必要があります。示されているデータサンプルでは、​​これは当てはまりません。上のコードはうまくいくはずです。ここで

は、それのすべてがこれを行うには関数に包まれている:

def load(datafile): 

    with open(datafile) as infp: 
     for line in infp: 
     line = line.rstrip() 
     name, age, height = line.split(',') 
     print 'Name:"%s"' %name 
     print 'Age:"%s"' %age 
     print 'Height:"%s"' %height 

あなたのデータが「mydata.txtという」という名前のファイルに保存されている場合は、この

load('myData.txt') 
のような上記 load関数を呼び出します
+0

コンマで区切られています。スペースをカンマで区切り、lstrip()する必要があります。 – pepr

+0

@peprこれをキャッチするためにありがとう..これを見落とした。それを修正します。 – Levon

+0

名前、年齢、高さ= line.split( '、')目的のブロックを期待している行。 – EatMyApples

2
data = open('file.txt').read().splitlines() 
for line in data: 
    person = line.split(',') 
    print 'Name:', person[0] 
    print 'Age:', person[1] 
    print 'Height:', person[2] 
+0

私は私はそれを置くつもりです、保存と表示は2つの別々のオプションになるでしょうか? 'DEF displayinfo(): 人物= line.split(」 ') プリント(' 名前: ')、人[0] プリント(' 年齢 ')、人[1] プリント(' 高')、人[2] def loadinfo(): data = open(' packages.txt ')。read()。splitlines() ' 私は正しいのですか? – EatMyApples

+0

動作しますか?私には大丈夫です。 – Scorpil

+0

いいえ、その機能していません – EatMyApples

1
fil=open('file.txt','r') 

for line in fil:     # iterate through the file.txt line by line 

    name,age,height=line.rstrip().split(',')  #now after this name='Vincent' and age='18' , height='190' 

    print(name,age,height) 

出力:

vincent 18 190 
+0

Pythonはfor行のfor行を好きではありません。 NameError:名前 'fil'は定義されていません – EatMyApples

+0

@ user1365542それは私のためにうまく動作します。このプログラムの最初の行をコピーしていないように見えますか? –

+0

また、コードの最後に 'fil.close()'を追加する必要があります。私の意見では、短い生きているファイルオブジェクトのための 'f'識別子がより良いです。 – pepr

0

標準のcsvモジュールを使用してファイル行を['Vincent', '18', '190']のような行に読み込む方法もあります。

数字を整数(文字列ではない)にする場合は、文字列をint(str_variable)で明示的に変換する必要があります。

0

ファイル、それを読むためにこれを使用して保存した後:

import csv 

filename = 'myfile.txt' 

# the code that creates 
# the file goes here 

the_file = csv.reader(open(filename, 'rb')) 
for line in the_file: 
    # line[0] is Name 
    # line[1] is Age 
    # line[2] is Height 
+0

しかし、同じ行にe値があり、何とか分割する必要があることです。 – EatMyApples

+0

'line'は、csvモジュールで既に分割された項目のリストであるため、' row'と呼ばれる必要があります。ここでの問題は、明示的に閉じることができないため、* anonymous * 'open()'です。 'the_file'は' lesser'と呼ばれる方が良い(混乱を少なくするため)。 – pepr

0

をこれが私の作品

f = open('temp.txt', 'r') 
for line in f.readlines(): 
    a,b,c = line.split(',') 
    print "Name:%s\nAge:%s\nHeight:%s\n" % (a,b,c) 
f.close() 

出力

Name:Vincent 
Age:18 
Size:190 
関連する問題