8

ばかげた質問をしている場合は申し訳ありませんが、問題があると思います。

私は最近 Python の学習を開始し、いくつかのアルゴリズム ベースの問題を解決しようとしました。ただし、問題の 1 つは、すべての Algo チャレンジに何らかの入力ファイルが付属していることです。通常、いくつかのテストケース数、テストケースなどで構成されています

4 #cases

1 2 5 8 4 #case 1
sadjkljk kjsd #case 2
5845 45 55 4 # case 3
sad sdkje dsk # case 4

問題の解決を開始するには、入力データを制御する必要があります。私は、Python 開発者が主Listsに入力データの保存に使用していることを見てきました。

私は試した:

fp = open('input.txt')
    for i, line in enumerate(fp.readlines()):
        if i == 0:
            countcase = int(i)
            board.append([])
        else:
            if len(line[:-1]) == 0:
                currentBoard += 1
                board.append([])
            else:
                board[currentBoard].append(line[:-1])
    fp.close()

しかし、それが特定の入力ファイルを解析する最良の方法だとは思いません。

入力ファイルを解析するためのベスト プラクティスは何ですか? 私が従うことができる特定のチュートリアルまたはガイダンスはありますか?

4

3 に答える 3

2

スペースのような固定区切り文字を使用すると、次も使用できます。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import csv

with open("input.txt") as file: 
    reader = csv.reader(file, delimiter=' ')
    for row in reader:
        print row
于 2013-04-15T04:01:05.367 に答える
1

Python では、あらゆる種類の巧妙なトリックや時間の節約になる方法を常に発見できます (実際、実際のプロジェクトで実際に推奨される時間の節約方法の 1 つはwithステートメントです)。 、次のようなものに固執する必要があります。

infile = open("input.txt", "r") # the "r" is not mandatory, but it tells Python you're going to be reading from the file and not writing

numCases = int(infile.readline())
infile.readline() #you had that blank line that doesn't seem to do anything
for caseNum in range(numCases):
    # I'm not sure what the lines in the file mean, but assuming each line is a separate case and is a bunch of space-separated strings:
    data = infile.readline().split(" ")
    # You can also use data = list(map(int, infile.readline.split(" "))) if you're reading a bunch of ints, or replace int with float for a sequence of floats, etc.
    # do your fancy algorithm or calculations on this line in the rest of this for loop's body

infile.close() # in the case of just reading a file, not mandatory but frees memory and is good practice

次のようにするオプションもあります (大量のデータを読み取っていない場合は、実際には自分の好みに合わせてください)。

infile = open("input.txt", "r")
lines = infile.read().strip().split("\n") # the .strip() eliminates blank lines at beginning or end of file, but watch out if a line is supposed to begin or end with whitespace like a tab or space
# There was the (now-redundant) line telling you how many cases there were, and the blank following it
lines = lines[2:]
for line in lines:
    # do your stuff here
infile.close()
于 2013-04-15T03:14:49.337 に答える