2017-09-29 23 views
0

私はPythonのnoobであり、簡単な作業に固執しています。私はstackoverflowで同様の質問を見たが、自分の問題に適用することができませんでした。私は名前のリストを含むファイルを作成しました。元のファイルを読み込んで新しいファイルを作成するには(ファイル内にいくつの名前があるのか​​わからない)、名前を反転させます(人は同じ順序ですが名前はファーストネームの前にあります)。以下は私のスクリプトです:Python 3:名前のファイルを読み込み、名前と姓が逆の新しいファイルを作成します。

第一のファイル:: ( 'モーティースミス'、 'ドナGueterman'、 'ベス・スミス'、 'リック・サンチェス'、 「リトルディッパー

firstname1 = "Morty" 
lastname1 = "Smith" 
fullname1 = firstname1 + " " + lastname1 

firstname2 = "Donna" 
lastname2 = "Gueterman" 
fullname2 = firstname2 + " " + lastname2 

firstname3 = "Beth" 
lastname3 = "Smith" 
fullname3 = firstname3 + " " + lastname3 

firstname4 = "Rick" 
lastname4 = "Sanchez" 
fullname4 = firstname4 + " " + lastname4 

firstname5 = "Little" 
lastname5 = "Dipper" 
fullname5 = firstname5 + " " + lastname5 

formal_names = fullname1,fullname2,fullname3,fullname4,fullname5 

f = open("names_normal.txt","w") 
f.write("%s " % (formal_names,)) 
f.close() 

def reverse_list(lst): 
    new = [] 
    count = len(lst)-1 
    while count >=0: 
     new.append(lst[count]) 
     count -= 1 
    return new 

x = reverse_list(formal_names) 

n = open("names_new.txt","w") 
n.write("%s " % (x,)) 
n.close() 

は、これらは私の結果であります')

第二のファイル:(' リトルディッパー ' 'リック・サンチェス'、 'ベス・スミス'、 'ドナGueterman'、 'モーティースミス')

私が欲しいもの:( '・スミスモーティー'、' Gueterman Donna '、' Smith Beth '、' Sanchez Rick '、' Dipper Little ')

ご協力いただければ幸いです!どうもありがとうございます!

+0

は、万が一、あなたは試してみました: 'lastnameX +「」+ firstnameX'?連結の順序を逆にする... – schwobaseggl

+0

こんにちは!はい、私はそれを私のオリジナルでしました。私が達成しようとしているのは、何も知らなくてもファイルを見ることができるコマンドであるが、その中に名前があることだ。それは理にかなっていますか? –

答えて

0
def reverse_list(lst): 
     new = [] 
     for name in lst: 
       temp = name.split(" ") 
       new += [temp[1]+" "+temp[0]] 

配列内の単語の順序を変更するだけで、スペースからの分割で名前と姓の順序を変更する必要があります。

0
def reverse_name(name): 
    # Try to fill here and update if doesn't work 

def reverse_list(lst): 
    new = [] 
    for name in lst: 
     new.append(reverse_name(name)) 
    return new 
+0

ご協力いただきありがとうございます! reverse_nameを定義する際に、リスト内の各人を定義する構文を書く場所はどこですか? –

0

これは私がこの問題を攻撃した方法です。上記のような関数に入れておくのが最善でしょう。

firstname1 = "Morty" 
lastname1 = "Smith" 
fullname1 = firstname1 + " " + lastname1 
firstname2 = "Donna" 
lastname2 = "Gueterman" 
fullname2 = firstname2 + " " + lastname2 
firstname3 = "Beth" 
lastname3 = "Smith" 
fullname3 = firstname3 + " " + lastname3 
firstname4 = "Rick" 
lastname4 = "Sanchez" 
fullname4 = firstname4 + " " + lastname4 
firstname5 = "Little" 
lastname5 = "Dipper" 
fullname5 = firstname5 + " " + lastname5 
formal_names = [fullname1,fullname2,fullname3,fullname4,fullname5] 

reversed = [] 
for i in range(0, (len(formal_names))): 
    rev = formal_names[i].split() 
    rev_name = rev[1] + ' ' + rev[0] 
    reversed.append(rev_name) 
print(reversed) 
['Smith Morty', 'Gueterman Donna', 'Smith Beth', 'Sanchez Rick', 'Dipper Little'] 

今、あなたはちょうどあなたが一人一人の名前の別の変数を使用して問題を複雑にしている

with open('output.txt', 'w') as file: 
    for name in reversed: 
     file.write(name) 
+0

お手数をおかけしていただきありがとうございます!私はこれに従おうとしています。私は反転= []セクションにプラグインします。 –

+0

[1 2 3] [[1,2,3] [4,5,6,7] [8,4,5,6]] [0 2 4 6 8 10] [ [0. 0. 0.] [0. 0. 0.]] [[1.11.1] [1.11.1] [1.11.1 。]] –

+0

なぜテキストではなく整数を吐き出すのか? –

0

にファイルにリストを書き込みます。 Pythonでは、これを処理するより良い方法は、pythonのデータ構造の1つ、この場合はlistを使用し、各名前はtupleに含まれています。これを行うメリットは、リストを繰り返し処理して、名前の一部を位置(例:names[0][1]:Smith)で参照できることです。

names = [("Morty","Smith"), 
     ("Donna","Gueterman"), 
     ("Beth","Smith"), 
     ("Rick","Sanchez"), 
     ("Little","Dipper")] 

それとも、あなたはあなたが一人一人のために他のデータ項目を追加する場合は特に、物事を明確にするためにnamedtupleを使用することができますしたい場合。

import collections 
Person = collections.namedtuple('Person', 'first last') 
names = [Person("Morty","Smith"), 
     Person("Donna","Gueterman"), 
     Person("Beth","Smith"), 
     Person("Rick","Sanchez"), 
     Person("Little","Dipper")] 

出力は、リストの内包表記を使用して作成することができます。

normal = ", ".join([name.first + " " + name.last for name in names]) 
reversed = "; ".join([name.last + ", " + name.first for name in names]) 
print(normal) 
print(reversed) 

あなたは句読点を変更することができます:最初の文字列", "は名の間に、2番目の文字列" "は、単語と単語の間です。その後、以前の回答で提案された方法を使用して、文字列をファイルに格納します。

(。私はそうでなければ、「アラン・サイモン」のような名前の問題に実行することができ、最後と最初の間に句読点を使用して助言する)

+0

これは素晴らしいです。私はまだ名前付きタプルを使っていませんが、今は私の注意を引いています。それをより良く理解するためにこれを見ていきます。ご協力ありがとうございました! –

関連する問題