Tôi là một người mới sử dụng Python đang cố phân tích một tệp để tạo bảng phân bổ bộ nhớ. Tệp nhập của tôi có định dạng sau:Từ điển Python với các biến là các phím
48 bytes allocated at 0x8bb970a0
24 bytes allocated at 0x8bb950c0
48 bytes allocated at 0x958bd0e0
48 bytes allocated at 0x8bb9b060
96 bytes allocated at 0x8bb9afe0
24 bytes allocated at 0x8bb9af60
Mục tiêu đầu tiên của tôi là tạo bảng tính số lần phân bổ byte cụ thể. Nói cách khác, đầu ra mong muốn của tôi cho đầu vào ở trên sẽ là một cái gì đó như:
48 bytes -> 3 times
96 bytes -> 1 times
24 bytes -> 2 times
(cho bây giờ, tôi không phải lo lắng về các địa chỉ bộ nhớ)
Kể từ khi tôi đang sử dụng Python, tôi nghĩ làm điều này bằng cách sử dụng một từ điển sẽ là đúng cách để đi (dựa trên khoảng 3 giờ 'giá trị đọc hướng dẫn Python). Đó có phải là một ý tưởng tốt?
Khi cố gắng thực hiện điều này bằng từ điển, tôi quyết định đặt số byte thành 'khóa' và bộ đếm làm 'giá trị'. Kế hoạch của tôi là tăng bộ đếm trên mọi lần xuất hiện của khóa. Tính đến bây giờ, đoạn mã của tôi là như sau:
# Create an empty dictionary
allocationList = {}
# Open file for reading
with open("allocFile.txt") as fp:
for line in fp:
# Split the line into a list (using space as delimiter)
lineList = line.split(" ")
# Extract the number of bytes
numBytes = lineList[0];
# Store in a dictionary
if allocationList.has_key('numBytes')
currentCount = allocationList['numBytes']
currentCount += 1
allocationList['numBytes'] = currentCount
else
allocationList['numBytes'] = 1
for bytes, count in allocationList.iteritems()
print bytes, "bytes -> ", count, " times"
Với điều này, tôi nhận được một lỗi cú pháp trong 'has_key' gọi, dẫn tôi đặt câu hỏi liệu nó thậm chí có thể sử dụng các biến như là chìa khóa từ điển. Tất cả các ví dụ tôi đã thấy cho đến nay giả định rằng các phím có sẵn trả trước. Trong trường hợp của tôi, tôi chỉ có thể lấy khóa khi tôi phân tích tệp đầu vào.
(Lưu ý rằng tập tin đầu vào của tôi có thể chạy vào hàng ngàn dòng, với hàng trăm các phím khác nhau)
Cảm ơn bạn cho bất kỳ giúp bạn có thể cung cấp.
như tôi thấy bạn trích dẫn 'numBytes', vì vậy, bạn luôn được đề cập đến liên tục – dmitry
và bạn bỏ qua ruột kết ở dòng sau 'nếu allocationList.has_key ('numBytes')' và 'else' - nó phải được lỗi cú pháp – dmitry