2009-06-25 33 views
28

Tôi có một kịch bản python rất đơn giản mà nên quét một tập tin văn bản, trong đó có dòng định dạng như id = 'giá trị' và đặt chúng vào một dict. mô-đun python được gọi là chval.py và tệp đầu vào là in.txt. đây là đoạn code:Một số nguyên là bắt buộc? open()

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() 

khi tôi cố gắng để chạy nó tôi nhận được:

Traceback (most recent call last):
File "chval.py", line 9, in ? f = open(sys.argv[1], 'r') TypeError: an integer is required

Tôi đang sử dụng python 2.4 ... bởi vì tôi đã được thử thách để không sử dụng bất cứ điều gì mới hơn, là có một cái gì đó về mở() mà tôi không biết về? Tại sao nó muốn một số nguyên?

mọi thứ sau dòng đó chưa được kiểm tra. trong ngắn hạn: tại sao nó cho tôi lỗi và làm thế nào để tôi sửa chữa nó?

+1

Tập lệnh của bạn có lỗi trong đó. vals là một từ điển không có phương thức chắp thêm. Bạn chỉ muốn gán cho các vals [t [0]] = t [1] – Christopher

+0

, nó được cho là "cho dòng trong f:" trái ngược với val_f – Sev

+0

yeah sev, tôi đã trải qua và thay đổi biến của tôi giữa chừng ... cảm ơn vì đã chỉ ra điều đó. – Victor

Trả lời

52

Vì bạn đã thực hiện from os import *, bạn (vô tình) sử dụng os.open, thực sự yêu cầu cờ nguyên thay vì chữ "r" hoặc "w" văn bản. Đưa ra dòng đó và bạn sẽ vượt qua được lỗi đó.

9

Đừng làm import * from wherever mà không có lý do chính đáng (và không có nhiều lý do).

Mã của bạn đang chọn hàm os.open() thay vì hàm open() tích hợp sẵn. Nếu bạn thực sự muốn sử dụng os.open(), hãy import os rồi gọi os.open(....). Cho dù bạn muốn mở cuộc gọi nào, hãy đọc tài liệu về các đối số cần thiết.

9

Cũng lưu ý rằng bắt đầu bằng Python 2.6 hàm dựng sẵn open() bây giờ là bí danh cho hàm io.open(). Nó thậm chí còn được coi là loại bỏ mở sẵn() trong Python 3 và yêu cầu sử dụng io.open, để tránh va chạm không gian tên ngẫu nhiên phát sinh từ những thứ như "từ nhập blah *". Trong Python 2.6+ bạn có thể viết (và cũng có thể xem xét phong cách này là thực hành tốt):

import io 
filehandle = io.open(sys.argv[1], 'r') 
0

Từ http://www.tutorialspoint.com/python/os_open.htm bạn cũng có thể giữ cho nhập khẩu và sử dụng

file = os.open ("foo. txt", chế độ)

và phương thức có thể là:

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 
1

Bằng cách cung cấp các thông số này giải quyết vấn đề của tôi:

with open('tomorrow.txt', mode='w', encoding='UTF-8', errors='strict', buffering=1) as file: 
file.write(result) 
Các vấn đề liên quan