1

Python でコーディングする必要があるこのプロジェクトがありますが、完全な初心者にとっては非常に困難です。基本的に、私はPythonでプログラミングしたことがなく、昨日からグーグル学習を始めたばかりなので、これを解決することさえできないので、皆さんが助けてくれると思いました.

最初のテキストファイルが与えられます。これをinput.txtと呼びましょう。これには、次のデータが次のように含まれています。

Thomas Hales
12 2345 
45 6780
63 3210
Peter Lebones
10 15430
11  1230
23 3450
John White
2 12130
11 32410
15 4520

与えられた名前とその下に番号があります。左の列の数字は、この問題のための単なる識別番号です。右の列の数字は、人々が銀行に投資した金額です。

テキスト ファイル内のすべてのデータを取得し、何らかの方法で操作してから、output.txt という新しいテキスト ファイルを作成します (これはすべて、python によって実行されるスクリプトによって行われます)。上記の例では、これを含みます。 :

Thomas Hales 45
Peter Lebones 10
John White 11

私がこれまでに持っているもの(しかし、まったく機能していません。さらに、それは完全な混乱であり、彼が何をしているのか本当に知らない誰かの助けを借りてそれを行いました):

import sys
import subprocess
import re
import string


try:
    fread=open(sys.argv[1]).readlines()
except IOError:
    print "There is no file like that!"
    sys.exit()
except IndexError:
    print "There is no argumentum given"
alpha = string.ascii_letters
writeout=open("result.txt","w")
inputarray=fread.readlines()
for ... in inputarray: # not sure what goes in the "..." part
    array=inputarray.split('\n')
for i in range(len(array)-1):
    if array[i].isalpha():
    writeout.write(array[i]+" ")

fread.close()
writeout.close()

基本的に、テキストファイルが与えられます。次に、各人について、最高の投資を選択し、左側の列の数字をその最高の投資に関連付けることになっています。次に、各人の名前と最高の投資の「ID 番号」を含む output.txt を作成するスクリプトを作成することになっています。

4

4 に答える 4

2

行が数字で始まる場合は投資、そうでない場合は名前であると仮定します。

名前を見つけるたびに、以前の名前と最高の投資識別子を書き出します。

with open(sys.argv[1]) as inputfile, open("result.txt","w") as outputfile:
    name = None
    investment_id = max_investment = 0
    for line in inputfile:
        if not line.strip(): continue  # skip empty lines

        if not line[:1].isdigit():  # name
            if name and investment_id: 
                # write previous name
                outputfile.write('{} {}\n'.format(name, investment_id))
            name = line.strip()
            investment_id = max_investment = 0

        else:
            id, investment = [int(i) for i in line.split()]
            if investment > max_investment:
                max_investment = investment
                investment_id = id

    if name and investment_id: 
        # write last name
        outputfile.write('{} {}\n'.format(name, investment_id))

入力例では、次のように記述します。

Thomas Hales 45
Peter Lebones 10
John White 11
于 2013-04-12T15:10:21.677 に答える
1

python re モジュールを使用すると、行を繰り返し処理できるものに分割するだけで、優れた起動プラットフォームが得られる場合があります。

>>> results = re.findall("(\w+) (\w+)",buff,re.S)
[('Thomas', 'Hales'), ('12', '2345'), ('45', '6780'), ('63', '3210'), ('Peter', 'Lebones'), ('10', '15430'), ('23', '3450'), ('John', 'White'), ('2', '12130'), ('11', '32410'), ('15', '4520')]
于 2013-04-12T15:13:56.433 に答える
1

おそらく、ファイルを 1 行ずつ処理するためのこの基本的なレシピは、すぐに使い始めるのに役立つでしょう。

import sys

file_name = sys.argv[1]

# This takes care of closing the file after we're done processing it.
with open(file_name) as file_handle:

    # Once we have a file handle, we can iterate over it.
    for line in file_handle:

        # This is where your real programming logic will go.
        # For now, we're just printing the input line.
        print line,

split()数値行を分割できるため、便利だと思うかもしれません。たとえば、これを試して、どのように機能するかを試すことができます。

parts = line.split()
print parts
于 2013-04-12T15:13:16.533 に答える
1
   with open("input.txt", "r") as inp, open("output.txt", "w") as out:
       data = inp.readlines()
       for i in xrange(0, len(data), 4):
           name = data[i].strip()
           maxi = 0
           true_code = 0
           for item in data[i+1: i+4]:
              code, bal = item.strip().split(" ")
              code, bal = int(code), int(bal)
              if bal >= maxi:
                  maxi = bal
                  true_code = code
           out.write("%s %s" %(name, true_code))
于 2013-04-12T15:24:17.543 に答える