2012-11-13 28 views
6

Bạn có thể giải thích những gì đang diễn ra trong mã này không? Tôi dường như không hiểu được cách bạn có thể mở tệp và đọc nó theo từng dòng thay vì tất cả các câu cùng một lúc trong vòng lặp for. Cảm ơncác tệp mở và dòng đọc python3

Hãy nói rằng tôi có những câu trong một file tài liệu:

cat:dog:mice 
cat1:dog1:mice1 
cat2:dog2:mice2 
cat3:dog3:mice3 

Đây là mã:

from sys import argv 

filename = input("Please enter the name of a file: ") 
f = open(filename,'r') 

d1ct = dict() 
print("Number of times each animal visited each station:") 
print("Animal Id   Station 1   Station 2") 

for line in f: 
    if '\n' == line[-1]: 
      line = line[:-1] 
    (AnimalId, Timestamp, StationId,) = line.split(':') 
    key = (AnimalId,StationId,) 
    if key not in d1ct: 
      d1ct[key] = 0 
    d1ct[key] += 1 

Trả lời

7

Sự kỳ diệu là tại địa chỉ:

for line in f: 
    if '\n' == line[-1]: 
      line = line[:-1] 

Python file đối tượng đặc biệt ở chỗ chúng có thể được lặp lại trong vòng lặp for. Trên mỗi lần lặp lại, nó sẽ truy xuất dòng tiếp theo của tệp. Bởi vì nó bao gồm các ký tự cuối cùng trong dòng, có thể là một dòng mới, nó thường hữu ích để kiểm tra và loại bỏ các ký tự cuối cùng.

+0

Câu trả lời này hữu ích cho tôi. Cảm ơn bạn :) – KestutisIT

7

Như Moshe đã viết, mở đối tượng tệp có thể được lặp lại. Chỉ, chúng không thuộc loại file trong Python 3.x (như chúng ở Python 2.x). Nếu đối tượng tệp được mở ở chế độ văn bản, thì đơn vị lặp lại là một dòng văn bản bao gồm \n.

Bạn có thể sử dụng line = line.rstrip() để xóa \n cộng với dấu cách không dấu.

Nếu bạn muốn đọc nội dung của tệp cùng một lúc (thành chuỗi nhiều dòng), bạn có thể sử dụng content = f.read().

Có một lỗi nhỏ trong mã. Các tập tin mở nên luôn luôn được đóng lại. Tôi có nghĩa là sử dụng f.close() sau vòng lặp for. Hoặc bạn có thể bọc mở cho cấu trúc with mới hơn sẽ đóng tệp cho bạn - Tôi khuyên bạn nên làm quen với cách tiếp cận sau này.

+0

Cảm ơn bạn. Câu trả lời đã giúp tôi :). – KestutisIT

Các vấn đề liên quan