В чем разница между функциями чтения и открытия? - PullRequest
0 голосов
/ 22 октября 2018

Выполнение следующего кода:

if __name__ == "__main__":

    doc = sum(map(int, open('./matrix')))
    print(doc)

    with open("./matrix") as f:

        doc1 = f.read().split('\n')
        print(sum(map(int, doc1)))

        doc2 = sum(map(int, f.read()))
        print(doc2)

Вывод соответственно:


5537376230390876637302048746832985971773659831892672

5537376230390876637302048746832985971773659831892672

0

Кроме того, мой входной файл матрицы содержит:

"37107287533902102798797998220837590246510135740250
46376937677490009712648124896970078050417018260538
74324986199524741059474233309513058123726617309629
91942213363574161572522430563301811072406154908250
23067588207539346171171980310421047513778063246676
89261670696623633820136378418383684178734361726757
28112879812849979408065481931592621691275889832738
44274228917432520321923589422876796487670272189318
47451445736001306439091167216856844588711603153276
70386486105843025439939619828917593665686757934951
62176457141856560629502157223196586755079324193331
64906352462741904929101432445813822663347944758178
92575867718337217661963751590579239728245598838407
58203565325359399008402633568948830189458628227828
80181199384826282014278194139940567587151170094390
35398664372827112653829987240784473053190104293586
86515506006295864861532075273371959191420517255829
71693888707715466499115593487603532921714970056938
54370070576826684624621495650076471787294438377604
53282654108756828443191190634694037855217779295145
36123272525000296071075082563815656710885258350721
45876576172410976447339110607218265236877223636045
17423706905851860660448207621209813287860733969412
81142660418086830619328460811191061556940512689692
51934325451728388641918047049293215058642563049483"

Так можете ли вы сказать мне, в чем разница между функциями открытия и чтения?

Когда я пытаюсь добавить разделение на doc2, после этого оно должно выглядеть следующим образом:

doc2 = sum(map(int, f.read().split("\n")))

И все же я получаю сообщение об ошибке:

ValueError: invalid literal for int() with base 10: ''

Я знаючто есть вопрос, который был задан, но я пытаюсь понять разницу между открытым и прочитанным.

Я ценю ваши ответы

Спасибо,

1 Ответ

0 голосов
/ 22 октября 2018

open() возвращает объект открытого файла, из которого вы можете read данные.Количество байтов за раз, все данные за один раз или итерации по линиям (поведение при использовании с циклом for)

В вашем конкретном выводе проблема заключается в использовании read на f для doc2.

В предыдущей строке doc1 = f.read().split('\n') все данные были прочитаны, и мы достигли EOF, поэтому для doc2 не осталось никаких данных, следовательно, 0.

...