2017-03-17 9 views
1

babynames2014.txtファイルから名前を読み取ってから、男女の名前を分けて2つの新しいファイルを作成する必要があります。結果のファイルは、boynames2014.txtとgirlnames.txtと呼びます。 babynames2014.txtファイル次のようになります。Pythonが.txtファイルを読み書きする

1ノアエマ

2リアムオリビア

3メイソンソフィア

4ヤコブイザベラ

、それは100男の子と女の子に達するまで継続名前。 私がこれまでに書いたコードでは、新しいテキストファイルの両方が作成されますが、boynames2014には何も含まれていません。そして、girlnames2014には、このような前に番号1のNoahという名前のみが含まれています。

私はreadline()line.split() のどこかで使用する必要があると思います。どこでどのように正しく使用するか分かりません。また、babynames2014.txtファイルが見つからない場合には、try/exceptブロックを使用して例外を処理する必要があります。

infile = open("babynames2014.txt", "r")  
    outfile = open("boynames2014.txt", "w") 
    outfile = open("girlnames2014.txt", "w") 


    line = infile.readline() 
    datafield = line.split() 
    boyname2014 = datafield[0] 
    girlname2014 = datafield[1] 
    outfile.write(boyname2014) 
    outfile.write(girlname2014) 


    infile.close() 
    outfile.close() 

私はPythonを2-3ヶ月間勉強しただけで、もっと学ぶのに役立つアドバイスをいただきありがとうございます!

+0

あなたが期待しているものが得られず、助けになる理由はほとんどありません。 babynames2014.txtのサンプルを作成します。編集:私はちょうどあなたがサンプルを持って気づいた。 – putonspectacles

答えて

1

私はあなたがこのようにやったはずですboynames2014.txtとgirlnames2014.txt

の両方のために、すなわち、論理的に正しくない一つのこと、outfile気づきました。

infile = open("babynames2014.txt", "r")  
outfile_boys = open("boynames2014.txt", "w") 
outfile_girls = open("girlnames2014.txt", "w") 

次に、必要なデータを次のように改行して改行する必要があります。

lines = infile.read().split("\n") 

次に、以下のように行を繰り返し、スペースで分割します(デフォルト)。スペースによって

1 boy_name girl_name

分割が第一インデックスにboy_name及び第二インデックスへgirl_nameを提供します。あなたのファイルのようなデータが含まれているため

for line in lines: 
    datafield = line.split() 
    boyname2014 = datafield[1] 
    girlname2014 = datafield[2] 
    outfile_boys.write(boyname2014 + '\n') 
    outfile_girls.write(girlname2014 + '\n') 

私は1選択したと2インデックスデータフィールドのための

次に、通常どおりファイルを閉じます。

infile.close() 
outfile_boys.close() 
outfile_girls.close() 

希望します。

+0

ありがとう!皆さんがすべてを説明してくれて本当に感謝しています。 –

+0

@Andrew Nを手伝って幸いです – abhinav

0

出力ファイルには別個のポインタが必要です。

` 
infile = open("babynames2014.txt", "r") 
outfileboy = open("boynames2014.txt", "w") 
outfilegirl = open("girlnames2014.txt", "w") 
for line in infile.readlines(): 
    names = line.split(" ") 
    outfileboy.write(str(names[1]+"\n") 
    outfilegirl.write(str(names[2]+"\n") 

outfileboy.close() 
outfilegirl.close() 

` 
0

両方の出力ファイルを同じ変数名に指定しました。 outfile

infile = open("babynames2014.txt", "r")  
    outfileb = open("boynames2014.txt", "w") 
    outfileg = open("girlnames2014.txt", "w") 


    line = infile.readline() 
    datafield = line.split() 
    boyname2014 = datafield[0] 
    girlname2014 = datafield[1] 
    outfileb.write(boyname2014) 
    outfileg.write(girlname2014) 


    infile.close() 
    outfileb.close() 
    outfileg.close() 

すべての名前を取得するには、入力ファイルをループする必要があります。 ''.join([i for i in s if not i.isdigit()])を使用して名前から番号を削除できます。

infile = open("babynames2014.txt", "r")  
    outfileb = open("boynames2014.txt", "w") 
    outfileg = open("girlnames2014.txt", "w") 


    tmp = infile.readline() 
    line=''.join([i for i in tmp if not i.isdigit()]) 
    datafield = line.split() 
    boyname2014 = datafield[0] 
    girlname2014 = datafield[1] 
    outfileb.write(boyname2014) 
    outfileg.write(girlname2014) 


    infile.close() 
    outfileb.close() 
    outfileg.close() 
+0

両方のファイルに 'outfile'を使用しているので、あなたのコードはまだ間違っています! – abhinav

+0

申し訳ありませんが、私はそれを修正していました。 – Neeraj

0
outfile1 = open("boynames2014.txt", "w") 
    outfile2 = open("girlnames2014.txt", "w") 
    with open('babynames2014.txt') as infile: 
     for line in infile: 
      datafield = line.split() 
      boyname2014 = datafield[0] 
      girlname2014 = datafield[1] 
      outfile1.write(boyname2014) 
      outfile2.write(girlname2014) 
    outfile1.close() 
    outfile2.close() 
0

readline()だけですべての行を読んで、それを分割し、ファイル試しにそれらを書き込むには、単一の行(名前が示唆するよう) ので、最初の行のみが(1ノアエマ)を読んでもらう

を読み込み:

# use two different names for the files 
# you had one name `outfile` which was being 
# overwritten so tht why boy file was empty 

infile = open("babynames2014.txt", "r") 
boyfile = open("boynames2014.txt", "w") 
girlfile = open("girlnames2014.txt", "w") 

with open('babynames2014', 'r') as f: 
    for l in f.readlines(): # notice readlines instead of readline 
     _, boy, girl = l.split() # assumes the separator is a space 
     print(boy, file=boyfile) 
     print(girl, file=girlfile) 

# don't forget to close your file desciptors 
boyfile.close() 
girlfile.close() 
0

ここに行く、

#! /usr/bin/python 
import sys 

boy_file = str(sys.argv[1]) 
girl_file = str(sys.argv[2]) 

all_records = [line.strip() for line in open('babynames2014', 'r')] 

f1 = open(boy_file, "w") 
f2 = open(girl_file, "w") 

for record in all_records: 
     split_record = record.split(' ') 
     boy_name = split_record[1] 
     girl_name = split_record[2] 

     f1.write(boy_name+"\n") 
     f2.write(girl_name+"\n") 


f1.close() 
f2.close() 
0

は、正規表現のソリューションを検討してみませんか?

with open("babynames2014.txt", "r") as f1,open("boynames2014.txt", "w") as boys,open("girlnames2014.txt","w") as girls: 
    # Note this will not work for name which has speacial charecters like `-,$,etc` 
    boy_regex = re.compile(r"^\d\s?([a-zA-z0-9]+)\s[a-zA-z0-9]+$",re.MULTILINE) 
    girl_regex = re.compile(r"^\d\s?[a-zA-z0-9]+\s([a-zA-z0-9]+)$",re.MULTILINE) 
    boys.write('\n'.join(boy_regex.findall(f1.read()))) 
    girls.write('\n'.join(girl_regex.findall(f1.read()))) 
関連する問題