2012-04-01 16 views
6

Tôi có một tập Tôi đang cố gắng để mở ra trong python với dòng sau:"số nguyên là bắt buộc" khi mở() 'nhập tệp dưới dạng utf-8?

f = open("C:/data/lastfm-dataset-360k/test_data.tsv", "r", "utf-8") 

Calling này mang lại cho tôi những lỗi

TypeError: an integer is required

Tôi đã xóa tất cả các mã khác bên cạnh đó một dòng và vẫn nhận được lỗi. Tôi đã làm gì sai và làm thế nào tôi có thể mở nó một cách chính xác?

+0

không traceback nói gì? Dòng cuối cùng là dòng 'f = open (...)', hay bên trong các thư viện lõi python? – ninjagecko

+0

Đó là dòng f = open (...) – Jim

+1

phiên bản nào của Python? 3.x? hoặc 2.x? – gbulmer

Trả lời

11

Từ tài liệu cho open():

open(name[, mode[, buffering]])

[...]

The optional buffering argument specifies the file’s desired buffer size: 0 means unbuffered, 1 means line buffered, any other positive value means use a buffer of (approximately) that size. A negative buffering means to use the system default, which is usually line buffered for tty devices and fully buffered for other files. If omitted, the system default is used.

Bạn dường như đang cố gắng để vượt qua open() một chuỗi mô tả mã hóa tập tin như là đối số thứ ba để thay thế. Đừng làm thế.

+3

Chụp. Bạn đúng. Tôi đã có ý nghĩa để sử dụng codecs.open. Cảm ơn! – Jim

1

Tham số cuối cùng là open là kích thước của bộ đệm chứ không phải mã hóa của tệp.

Luồng tệp ít nhiều mã hóa bất khả tri (ngoại trừ bản dịch dòng mới trên các tệp không mở ở chế độ nhị phân), bạn nên xử lý mã hóa ở nơi khác (ví dụ: khi bạn nhận dữ liệu với cuộc gọi read(), bạn có thể giải thích nó như utf-8 sử dụng phương thức decode).

7

Bạn đang sử dụng sai mở.

>>> help(open) 
Help on built-in function open in module __builtin__: 

open(...) 
    open(name[, mode[, buffering]]) -> file object 

    Open a file using the file() type, returns a file object. This is the 
    preferred way to open a file. See file.__doc__ for further information. 

Như bạn có thể thấy thông số đệm là số nguyên.

Những gì bạn có thể muốn là codecs.open:

open(filename, mode='rb', encoding=None, errors='strict', buffering=1) 
2

Từ các tài liệu giúp đỡ:

open(...) 
    open(file, mode='r', buffering=-1, encoding=None, 
     errors=None, newline=None, closefd=True) -> file object 

bạn cần encoding='utf-8'; python nghĩ rằng bạn đang đi qua trong một đối số cho đệm.

0

này giải quyết vấn đề của tôi, tức là cung cấp một mã hóa (utf-8) trong khi mở file

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