2017-05-26 3 views
-3

カンマでファイル、スプリット私は次のことを行うために私を必要とするどのようなPythonのタスクを持っている

*プログラムの作成:

  1. を取得するために、姓と表示することで、このデータファイルを検索*を接触
  2. の詳細は
  3. 特定の月に誕生日を持つすべての連絡先を取得し、表示するために誕生(DD/MM/YYYY)の日付で、このデータファイルを検索

    ファイルに新しい人物の詳細を追加します。

    file = open ("c:\ABOOK.txt", "r") 
    
    myfile = (file.readline()) 
    
    mywordlist = myfile.split() 
    
    
    mylength= len(mywordlist)# reads how long it is 
    print(mylength) 
    count = 0 # counts 
    afound = 0 # counts 
    s_name = input("Enter a surname to be found:") 
    textfile=(file.readlines()) 
    print(textfile[0]) 
    mwl = textfile[0].split(",") 
    mwl1 = textfile[1].split(",") 
    mwl2 = textfile[2].split(",") 
    mwl3 = textfile[3].split(",") 
    mwl4 = textfile[4].split(",") 
    while(count<len(textfile)): 
        print(textfile[count]) 
        count = count + 1 
    print(mwl,mwl1,mwl2,mwl3,mwl4) 
    print(textfile.split(",")) 
    

ファイルを破ったことである「」さん、ここでは、メモ帳のエキスです。その6行は長いです。文字列を分割するために

Jackson,Samantha,2 Heather Row,Basingstoke,RG21 3SD,01256 
135434,23/04/1973,[email protected] 
Vickers,Jonathan,18 Saville Gardens,Reading,RG3 5FH,01196 
678254,04/02/1965,[email protected] 
Morris,Sally,The Old Lodge, Hook,RG23 5RD,01256 
728443,19/02/1975,[email protected] 
Cobbly,Harry,345 The High Street,Guildford,GU2 4KJ,01458 
288763,30/03/1960,[email protected] 
Khan,Jasmine,36 Hever Avenue,Edenbridge,TN34 4FG,01569 
276524,28/02/1980,[email protected] 
Vickers,Harriet,45 Sage Gardens,Brighton,BN3 2FG,01675 
662554,04/04/1968,[email protected] 
+3

実際にコードを書いてください。字下げはPythonでは非常に重要です。もっと重要なことはあなたの実際の質問は何ですか?具体的には機能していないもの... 同様に、抽出されたものを正確に表示するようにフォーマットしてください。 – shash678

+0

私はラップトップにいて、最近黙想すると少し揺れて、タッチパッドはちょっと敏感で、それはどうやって作られているのですか?そして、テキストファイル全体が "、"で分割されてしまいました。それから私は取得する必要がありますので、私はファイルでそれを見つけることができますまた、ファイルに人々のデータを追加します。私は完全に完了する必要はありませんいくつかの指導が必要ですが、それを完全に完了したいのでなければ私はそれをやめさせません –

+2

あなたのコードは最初の後に字下げされていませんか? – shash678

答えて

1

ここでは、プログラムの最初の2つの部分の基本的な解決方法を示します。ファイル名をハードコーディングしたり、改行文字をストライピングしたりするなど、これを大幅に改善することができます(この正確なコードを使用した場合あなたは100%を取得することはありません)が、私はあなたのための課題として残しておきます:

import sys 

def find_record_by_surname(input_surname): 
    found = False 
    with open("ABOOK.txt", "r") as f: 
     for line in f: 
      surname = line.split(',')[0] 
      if surname == input_surname.title(): 
       found = True 
    return found 

def return_details_by_surname(input_surname): 
    details = [] 
    with open("ABOOK.txt", "r") as f: 
     for line in f: 
      details = line.split(',') 
      if details[0] == input_surname.title(): 
       break 
    return details 

def find_record_by_month_of_birth(input_month): 
    if len(input_month) != 2: 
     input_month = "0" + input_month 
    found = False 
    with open("ABOOK.txt", "r") as f: 
     for line in f: 
      month = line.split(',')[6].split('/')[1] 
      if input_month == month: 
       found = True 
       break 
    return found 

def return_details_by_month_of_birth(input_month): 
    if len(input_month) != 2: 
     input_month = "0" + input_month 
    details = "" 
    with open("ABOOK.txt", "r") as f: 
     for line in f: 
      if line.split(',')[6].split('/')[1] == input_month: 
       details = details + line 
    return details 

if __name__ == "__main__": 
    print("Menu Choices") 
    print("============") 
    print("1: Search contacts by surname") 
    print("2: Search contacts by month of birth") 
    print("3: Add a new contact to ABOOK.txt") 
    print("4: Exit") 
    choice = input("Enter your choice: ") 
    while choice != "4": 
     if choice == "1": 
      input_surname = input("Enter a surname you would like the records for from ABOOK.txt? ") 
      if find_record_by_surname(input_surname): 
       print("The record with the entered surname was found in ABOOK.txt") 
       print("The details for that contact are:") 
       print(return_details_by_surname(input_surname)) 
      else: 
       print("The record with the entered surname was not found in ABOOK.txt") 
     if choice == "2": 
      input_month = input("Enter the month of birth (1-12) you would like the records for from ABOOK.txt? ") 
      if find_record_by_month_of_birth(input_month): 
       print("The details for the contact(s) with the entered month of birth are: ") 
       print(return_details_by_month_of_birth(input_month)) 
      else: 
       print("No record with the entered month of birth was found in ABOOK.txt") 
     if choice == "3": 
      # TO-DO code for adding a new contact 
      print() 
     print("Menu Choices") 
     print("============") 
     print("1: Search contacts by surname") 
     print("2: Search contacts by month of birth") 
     print("3: Add a new contact to ABOOK.txt") 
     print("4: Exit") 
     choice = input("Enter your choice: ") 
    print("Goodbye!")  
    sys.exit(0) 

ABOOK。使用されるtxtファイル:

Jackson,Samantha,2 Heather Row,Basingstoke,RG21 3SD,01256135434,23/04/1973,[email protected] 
Vickers,Jonathan,18 Saville Gardens,Reading,RG3 5FH,01196678254,04/02/1965,[email protected] 
Morris,Sally,The Old Lodge, Hook,RG23 5RD,01256728443,19/02/1975,[email protected] 
Cobbly,Harry,345 The High Street,Guildford,GU2 4KJ,01458288763,30/03/1960,[email protected] 
Khan,Jasmine,36 Hever Avenue,Edenbridge,TN34 4FG,01569276524,28/02/1980,[email protected] 
Vickers,Harriet,45 Sage Gardens,Brighton,BN3 2FG,01675662554,04/04/1968,[email protected] 
+1

お元気です。ありがとうございました!!これを手伝った後に私がする次のことは、生年月日を検索するためにこの作品を変更する方法を見つけてみることです。ファイルにね!あなたは生命の救助者である –

+0

簡単な方法は、あなたが最初に日付を格納する 'if'sを入れ子にすることです:' date = line.split( '、')[6] '次にsplitを使って'month = date.split( '/')[1]'と入力します。 – shash678

+0

私はあなたのコードを使用して、日付を与えるためにそれを変更しました、私は私が自分自身をそれを動作させることができるかどうかを尋ねるまで、私は24時間待っていたiveを動かすためにこれを得るように見えることができません –

0

は今、すべての異なる行を持つ配列となります

detail_arr = string.split(',') 

detail_arrを使用しています。ここ

はコードの例である:

>> str = "Jackson,Samantha,2 Heather Row,Basingstoke,RG21 3SD,01256135434,23/04/1973,[email protected]" 
>> str.split(',') 
['Jackson', 'Samantha', '2 Heather Row', 'Basingstoke', 'RG21 3SD', '01256135434', '23/04/1973', '[email protected]'] 

毎>>コンソールで実行されるラインです。詳細を追加するために

は、あなたのARRにそれらを追加してから実行します。

str = ''.join(map(lambda x: x + ',', details_arr))[:-1] 

筋力は今、すべての配列は、カンマで区切られますと、あなたのファイルに書き込むことができます。

コードでは、3行目のように空白でデータを分割したくないが、コンマで区切ってください。

また、exit節がないと、無限ループに陥ることがあります。以下のようになり

あなたのコードは次のとおりです。

file = open ("c:\ABOOK.txt", "r") 

data = file.read() 

data_rows = data.split(',') //every 8th row it will start a new entry (7,15,23...) 

は今、姓で検索すると、行6,14,22になります誕生日で検索しています...行0,7,15に を検索します。 すべての行を取り出すことができます。カウンターを作成して、どの連絡先に連絡しているかを確認できます。

c = 0 //counter of entry 
for i in xrange(len(data_rows)/8): 
    if data_rows[i+row_number] == val: // row_number depends on what youre trying to match 
     print ''.join(data_rows[c:c+8]) 
    c += 1 

ここで値に一致するエントリを確認できます。

+0

これはコードの行にどのように実装されるのでしょうか?先生は本当に教えてくれていません私の教師は厳格でもありませんが、彼の基準に合わないのであれば私にも認めるでしょう –

+0

@ChristopherAllum Better? – IsaacDj

+0

ありがとう:)これは私を理解してくれました –

関連する問題