Ответ 1
Поскольку вы сделали from os import *
, вы (accidenally) используете os.open, который действительно требует целочисленного флага вместо текстового "r" или "w". Выньте эту строку, и вы преодолеете эту ошибку.
У меня очень простой python script, который должен проверять текстовый файл, содержащий строки, отформатированные как id = 'value', и помещать их в dict. модуль 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(), о котором я не знаю? Почему он хочет целое число?
что-нибудь после этой строки не проверено. вкратце: почему это дает мне ошибку и как ее исправить?
Поскольку вы сделали from os import *
, вы (accidenally) используете os.open, который действительно требует целочисленного флага вместо текстового "r" или "w". Выньте эту строку, и вы преодолеете эту ошибку.
Не делайте import * from wherever
без уважительной причины (и их не так много).
Ваш код подбирает функцию os.open() вместо встроенной функции open(). Если вы действительно хотите использовать os.open(), выполните import os
, затем вызовите os.open(....)
. Независимо от того, что вы хотите вызвать, прочитайте документацию о том, какие аргументы она требует.
Также следует отметить, что начиная с Python 2.6 встроенная функция open() теперь является псевдонимом для функции io.open(). Было даже рассмотрено удаление встроенного open() в Python 3 и требование использования io.open, чтобы избежать случайных конфликтов пространства имен, возникающих в результате таких вещей, как "from blah import *". В Python 2.6+ вы можете написать (и также можете считать этот стиль хорошей практикой):
import io
filehandle = io.open(sys.argv[1], 'r')
Предоставив эти параметры, разрешили мою проблему:
with open('tomorrow.txt', mode='w', encoding='UTF-8', errors='strict', buffering=1) as file:
file.write(result)
Из http://www.tutorialspoint.com/python/os_open.htm вы также можете сохранить свой импорт и использовать
file = os.open( "foo.txt", режим)
и режим может быть:
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