Citirea liniei ints dintr-un fișier în Python (Revizuirea codului, Python)

Nils a intrebat.

Trebuie să listez o listă de numere întregi dintr-un fișier text separate prin linii noi într-o listă python. Am ajuns la codul de mai sus, care funcționează (pentru cazul meu), dar cu siguranță este departe de a fi optim.

def readIntegers(pathToFile):

    f = open(pathToFile)
    contents = f.read()
    f.close()

    tmpStr = ""

    integers = []

    for char in contents:

        if char == 'r':
            integers.append(int(tmpStr))
            tmpStr = ""
            continue

        if char == '
':
            continue

        tmpStr += char

    return integers

Acum am mult mai puțin cod, dar nu sunt sigur pentru care cazuri split() funcționează corect.

def readIntegers(pathToFile):

    with open(pathToFile) as f:
        a = [int(x) for x in f.read().split()]
    return a

1 răspunsuri
Konrad Rudolph

Nu este nevoie de split (puteți folosi readlines). Dar nu este nevoie de readlines, , de altfel:

def read_integers(filename):
    with open(filename) as f:
        return map(int, f)

sau, dacă vă place mai mult:

def read_integers(filename):
    with open(filename) as f:
        return [int(x) for x in f]

A file obiect este pur și simplu iterabil în Python și itera peste liniile sale.

Rețineți că, spre deosebire de ceea ce am spus mai devreme, înfășurarea obiectului fișier într-un fișier with bloc este foarte recomandat. Python nu garantează de fapt (deși recomandă acest lucru) că obiectele sunt eliminate automat la sfârșitul domeniului de aplicare. Mai rău, nu este garantat faptul că un fișier file obiect care este colectat închide de fapt fluxul subiacent.

(Rețineți că am adaptat numele metodei la convențiile Python).

Comentarii

  • Mulțumesc pentru răspuns 🙂 Nu m-am gândit să folosesc map aici.-  > Por Nils.

Tags: