Nó có thể là thú vị khi biết rằng có một sự khác biệt nhưng quan trọng tinh tế giữa:
file = open(filename)
lines = file.readlines()
for line in lines:
do something
và
file = open(filename)
for line in file:
do something
Các giải pháp đầu tiên (với readlines
) sẽ được tải toàn bộ nội dung của tập tin trong bộ nhớ và trả về một danh sách python (của chuỗi). Mặt khác, giải pháp thứ hai sử dụng một thứ gọi là iterator
. Điều này sẽ trong thực tế di chuyển con trỏ trong tập tin khi cần thiết và trả về một chuỗi. Điều này có một lợi ích quan trọng: Tệp không được tải vào bộ nhớ. Đối với các tệp nhỏ, cả hai cách tiếp cận đều OK.Nhưng miễn là bạn chỉ làm việc với các tập tin từng dòng, tôi đề nghị sử dụng các hành vi iterator trực tiếp.
Vì vậy, giải pháp của tôi sẽ là:
infile = open(filename)
outfile = open("%s.new" % filename, "w")
for line in infile:
outfile.write(line[2:])
infile.close()
outfile.close()
Hãy đến với suy nghĩ của nó: Nếu đó là một tập tin không ascii (ví dụ latin-1 được mã hóa), xem xét sử dụng codecs.open. Nếu không, bạn có thể có một bất ngờ khó chịu vì bạn có thể vô tình cắt một ký tự nhiều byte một nửa;)
Tuy nhiên, nếu bạn không cần python và điều duy nhất bạn cần làm là cắt hai ký tự đầu tiên ra khỏi tệp thì cách hiệu quả nhất để làm điều đó là gợi ý kch và sử dụng cut
:
cat filename | cut -d2- > newfile
Đối với những loại hoạt động tập tin nhanh chóng-và-bẩn tôi luôn luôn có cygwin cài đặt trên boxen phi linux của tôi. Nhưng tôi tin rằng có một tập hợp các cửa sổ nhị phân cho những công cụ này cũng sẽ thực hiện nhanh hơn trong Cygwin iirc.
Bạn nên đọc hướng dẫn (http://docs.python.org/tutorial/). Những gì bạn đang tìm kiếm là đúng trong phần giới thiệu (xem "chuỗi"). – hop