Целое число требуется? открыть() - PullRequest
36 голосов
/ 26 июня 2009

У меня есть очень простой скрипт на python, который должен отсканировать текстовый файл, содержащий строки, отформатированные как id = ' value ', и поместить их в ДИКТ. модуль python называется chval.py, а входной файл - in.txt. вот код:

import os,sys
from os import *
from sys import *

vals = {}

f = open(sys.argv[1], 'r')

for line in val_f:
    t = line.split('=')
    t[1].strip('\'')
    vals.append(t[0], t[1])

print vals

f.close()

когда я пытаюсь запустить его, я получаю:

Traceback (последний вызов был последним):
Файл "chval.py", строка 9, в? f = open (sys.argv [1], 'r') TypeError: требуется целое число

Я использую python 2.4 ... потому что мне предложили не использовать ничего более нового, есть ли что-то в open (), о котором я не знаю? Почему оно хочет целое число?

что-нибудь после этой строки не проверено. короче говоря: почему это дает мне ошибку и как я могу это исправить?

Ответы [ 5 ]

59 голосов
/ 26 июня 2009

Поскольку вы сделали from os import *, вы (случайно) используете os.open, который действительно требует целочисленного флага вместо текстового "r" или "w". Уберите эту строку, и вы получите эту ошибку.

11 голосов
/ 26 июня 2009

Также следует отметить, что начиная с Python 2.6 встроенная функция open () теперь является псевдонимом для функции io.open (). Было даже рассмотрено удаление встроенного open () в Python 3 и требование использования io.open, чтобы избежать случайных коллизий пространства имен, возникающих из-за таких вещей, как «из импорта бла *». В Python 2.6+ вы можете написать (и также можете считать этот стиль хорошей практикой):

import io
filehandle = io.open(sys.argv[1], 'r')
11 голосов
/ 26 июня 2009

Не делайте import * from wherever без уважительной причины (а таких не много).

Ваш код использует функцию os.open () вместо встроенной функции open (). Если вы действительно хотите использовать os.open (), наберите import os, затем наберите os.open(....). К какому открытию вы хотите позвонить, прочитайте документацию о том, какие аргументы требуются.

1 голос
/ 06 ноября 2017

Предоставление этих параметров решило мою проблему:

with open('tomorrow.txt', mode='w', encoding='UTF-8', errors='strict', buffering=1) as file:
    file.write(result)
0 голосов
/ 18 декабря 2015

С http://www.tutorialspoint.com/python/os_open.htm вы также можете сохранить свой импорт и использовать

file = os.open ("foo.txt", mode)

и режим может быть:

os.O_RDONLY: open for reading only
os.O_WRONLY: open for writing only
os.O_RDWR : open for reading and writing
os.O_NONBLOCK: do not block on open
os.O_APPEND: append on each write
os.O_CREAT: create file if it does not exist
os.O_TRUNC: truncate size to 0
os.O_EXCL: error if create and file exists
os.O_SHLOCK: atomically obtain a shared lock
os.O_EXLOCK: atomically obtain an exclusive lock
os.O_DIRECT: eliminate or reduce cache effects
os.O_FSYNC : synchronous writes
os.O_NOFOLLOW: do not follow symlinks
...