1

私はPythonとプログラミング全般に慣れていないので、正しく説明していない場合や適切な用語を使用していない場合はご容赦ください。同様に、非常に専門的な回答をされても、おそらく理解できないでしょう。私は最善を尽くしていますが、これは私にとって初めてのことであり、非常に困難です!

私はPythonの使い方を学ぼうとしているので、過去のハイキングや走行距離など、ハイキングに関連するさまざまなことを追跡する小さなプログラムの作成を開始しました。テーブルに入った。これは、入力されたデータで機能しますが、保存されたファイルからではありません。プログラムに入力したデータを後で使用できるように保存できるようにしたいと考えています。

ハイキングのリストを作成するモジュールを使用しています。各ハイキングには、目的地、ハイキングした距離、ハイキングした日数、およびパートナーがあります。プログラムのこの部分は意図したとおりに機能しています。情報を入力すると、入力されたデータは stored_words というリストとして保存され、そのリストが行として prettytable に追加されます。ハイキングの入力が完了すると、表が印刷されます。

def Hikes():

    import prettytable
    import csv

    answer = "yes"
    Index = 0


    mytable = prettytable.PrettyTable()

    x = prettytable.PrettyTable(["Destination", "Miles Hiked", "Days Hiked", "Partner"])
    x.align["Destination"] = "l" # Left align destination
    x.padding_width = 1 # One space between column edges and contents (default)

    while answer == "yes":
        words = ["destination", "miles hiked", "days hiked", "partner"]
        stored_words = []
        HikeList = []
        hikesave = open("hikes.txt" , "a")
        for word in words:
            answer = input("Enter the %s:" % word)
            stored_words.append(answer)
            print(stored_words)

        HikeList.append(stored_words)
        hikesave.write('\n')
        hikesave.write(str(stored_words))

        x.add_row(stored_words)

        hikesave.close()

        answer = input("Enter another hike? yes or no: ")


    print(x)

    return x

ファイルをロードするために作成したモジュールは次のとおりです。

def LoadFile():

    import prettytable
    Flag = False
    FileToLoad = str



    mytable = prettytable.PrettyTable()

    x = prettytable.PrettyTable(["Destination", "Miles Hiked", "Days Hiked", "Partner"])
    x.align["Destination"] = "l" # Left align destination
    x.padding_width = 1 # One space between column edges and contents (default)

    print("-----------------------------------")
    print("     A = Hikes")
    print("     B = Miles List")
    print("     B = Destinations List")
    print("-----------------------------------")
    print()

    FileToLoad = input("Which file would you like to open?")

    while Flag == False: #Loop will keep running until true
        while FileToLoad == "A" or FileToLoad == "B" or FileToLoad == "C":
            if FileToLoad == "A

                with open("hikes.txt", "r") as f:   
                    lines = f.readline()
                    print(lines)                    

                x.add_row(lines)

##                f = open("hikes.txt", "r")
##                for line in f:
##                    print(line)
##                    x.add_row(line)


                print(x)

                Flag = True

ファイル (hikes.txt) を LoadFile モジュールにロードし、そのファイル内のデータを行ごとに prettytable に追加する方法がわかりません。そうしようとすると、出力に次のエラーが表示されます。

-----------------------------------
     A = Hikes
     B = Miles List
     C = Destinations List
-----------------------------------

Which file would you like to open?A
['High Country Pathway, MI', '82', '4', 'solo']

Traceback (most recent call last):
  File "D:\Program Files\PROGRAMMING\Python\11-3-13.py", line 260, in <module>
    main()
  File "D:\Program Files\PROGRAMMING\Python\11-3-13.py", line 66, in main
    c = LoadFile()
  File "D:\Program Files\PROGRAMMING\Python\11-3-13.py", line 216, in LoadFile
    x.add_row(lines)
  File "D:\Program Files\PROGRAMMING\Python\lib\site-packages\prettytable.py", line 818, in add_row
    raise Exception("Row has incorrect number of values, (actual) %d!=%d (expected)" %(len(row),len(self._field_names)))
**Exception: Row has incorrect number of values, (actual) 48!=4 (expected)**

上記のエラーが発生する理由がわかりません。

これ:

['High Country Pathway, MI', '82', '4', 'solo']

前のモジュールで使用されたのと同じ形式で、prettytable... の行に追加する必要があります。

どんな助けでも大歓迎です。受け取ったエラー メッセージに関する情報を見つけることができず、ファイルの入出力を調べましたが、これを理解できません。私のコードにはおそらくたくさんの問題があることを知っていますが、覚えておいてください、私はPythonに非常に慣れておらず、物事を機能させようとしているだけなので、私にあまり苦労しないでください.

**編集

Stevha、あなたが提供したコードを試しましたが、7!=4 であることを除いて、まだ同じエラーが発生します。

トレースバック (最後の最後の呼び出し): ファイル "D:\Program Files\PROGRAMMING\Python\11-3-13.py"、265 行目、main() ファイル "D:\Program Files\PROGRAMMING\Python\11- 3-13.py"、66 行目、メイン c = LoadFile() ファイル "D:\Program Files\PROGRAMMING\Python\11-3-13.py"、219 行目、LoadFile x.add_row(row) ファイル"D:\Program Files\PROGRAMMING\Python\lib\site-packages\prettytable.py"、行 818、add_row raise Exception("行の値の数が正しくありません、(実際) %d!=%d (予想) " %(len(row),len(self._field_names))) 例外: 行の値の数が正しくありません。(実際) 7!=4 (予想)

以前に pickle と JSON を見たことがありますが、何をする必要があるのか​​よくわかりませんでした。私はテキストファイルがうまくいくと思っていました。情報の印刷には機能しますが、問題ありませんが、これまでのところ、きれいなテーブルに挿入することはできません。私はcsvインポートも検討していましたが、最初にテキストファイルで動作させようとしていました.

他の提案もありがとうございます。後でコードを調べて、入力の検証などを行う予定でしたが、今のところ、物事を機能させようとして、いじっているだけです。Python でできることとできないことを調べ、物事がどのように機能するかを確認しようとしています。HikeList リストのように、未使用のコードがいくつかあることは知っています。そのエラーを乗り越えることを期待して、テキストファイルにさまざまな方法でデータを保存しようとして作成しました。

Hiks.txt ファイルに保存されているデータを入力すると、プログラムは次のようになります。

    Choose from the list below: 

     A = Enter Miles Hiked
     B = Enter hiking destination
     C = Load File                        
     E = Exit program
--------------------------------------------------

Enter your selection:  b
Enter the destination:Big Bend, TX
['Big Bend, TX']
Enter the miles hiked:45
['Big Bend, TX', '45']
Enter the days hiked:5
['Big Bend, TX', '45', '5']
Enter the partner:Dan
['Big Bend, TX', '45', '5', 'Dan']
Enter another hike? yes or no: no
+--------------+-------------+------------+---------+
| Destination  | Miles Hiked | Days Hiked | Partner |
+--------------+-------------+------------+---------+
| Big Bend, TX |      45     |     5      |   Dan   |
+--------------+-------------+------------+---------+

print ステートメントは一時的にそこにあるので、テキスト ファイルに何が入力されているかを確認できます。Hiks.txt ファイルに新しいハイキングを追加すると、次のようになります。

['High Country Pathway, MI', '82', '4', 'solo']
['Wemincuhe Wilderness, CO', '55', '6', 'Lisa']
['Big Bend, TX', '45', '5', 'Dan']

テキスト ファイルの各行には、リスト形式の prettytable の 4 つの列すべての値が含まれています。このエラーは、4 つの値がないことを示していますが、各リストに 4 つの値を含むリストはありませんか? リストではなく文字列であると考えている場合、hicks.txt ファイルの各行がリストであることを python に伝えるにはどうすればよいですか?

4

1 に答える 1