2010-01-06 11 views

Trả lời

8
os.stat(filepath).st_size 

Giả sử bởi 'ký tự' nghĩa là byte. ETA:

tôi cần tổng số ký tự giống như những gì lệnh 'filename wc' mang lại cho tôi unix

Trong đó chế độ? wc trên chính nó sẽ cung cấp cho bạn một dòng, từ và số byte (giống như stat), không phải ký tự Unicode.

một công tắc -m sẽ sử dụng mã hóa hiện tại của miền địa phương để chuyển đổi thành Unicode và sau đó đếm mã: thực sự là những gì bạn muốn? Nó không có bất kỳ ý nghĩa để giải mã thành Unicode nếu tất cả các bạn đang tìm kiếm là các tập tin quá dài. Nếu bạn thực sự phải:

import sys, codecs 

def getUnicodeFileLength(filepath, charset= None): 
    if charset is None: 
     charset= sys.getfilesystemencoding() 
    readerclass= codecs.getReader(charset) 
    reader= readerclass(open(filepath, 'rb'), 'replace') 
    nchar= 0 
    while True: 
     chars= reader.read(1024*32) # arbitrary chunk size 
     if chars=='': 
      break 
     nchar+= len(chars) 
    reader.close() 
    return nchar 

sys.getfilesystemencoding() được mã hóa địa phương, tái tạo những gì wc -m làm. Nếu bạn biết bản thân mã hóa (ví dụ: 'utf-8') thì hãy chuyển mã đó vào thay thế.

Tôi không nghĩ bạn muốn làm điều này.

+0

hi bob, tôi cần tổng số ký tự giống như những gì lệnh 'filename wc' mang lại cho tôi unix – randeepsp

+0

@randeepsp: Cập nhật câu hỏi của bạn có thêm thông tin. Không thêm loại thông tin quan trọng này vào nhận xét. –

+0

Để đếm byte, 'os.path.getsize (filepath)' dễ nhớ hơn 'os.stat (filepath) .st_size' (nhờ @Sapph) – hobs

4
os.path.getsize(path) 

Return kích thước, tính theo byte, của con đường. Nâng cao os.error nếu tệp không tồn tại hoặc không thể truy cập được.

5

Hãy thử

import os 
os.path.getsize(filePath) 

để có được kích thước của tập tin của bạn, tính bằng byte.

7

Nếu bạn muốn mã số unicode tính cho một tệp văn bản được mã hóa cụ thể, bạn sẽ phải đọc toàn bộ tệp để thực hiện điều đó.

Tuy nhiên, nếu bạn muốn đếm byte cho một tập tin nào đó, bạn muốn os.path.getsize(), mà chỉ nên cần phải làm một stat vào file miễn là hệ điều hành của bạn có stat() hoặc cuộc gọi tương đương (tất cả Unixes và Windows làm).

+0

Vì các lược đồ mã hóa UTF, có thể bạn sẽ có các ký tự có số lượng byte khác nhau. –

2

cách khác

f=open("file") 
os.fstat(f.fileno()).st_size 
f.close()