Điều này ngầm định nghĩa các từ là chuỗi các khoảng trắng được phân tách bằng các chuỗi dấu cách [giống như chương trình Unix
for line in open[thefilepath]:0 đã làm]. Đối với các định nghĩa khác của từ, bạn có thể sử dụng các biểu thức thông thường. Ví dụ
import re re_word = re.compile[r'[\w-]+'] for line in open[thefilepath].xreadlines[ ]: for word in re_word.findall[line]: dosomethingwith[word]
Trong trường hợp này, một từ được định nghĩa là một chuỗi tối đa các chữ và số và dấu gạch nối
Đối với các định nghĩa khác của từ, rõ ràng bạn sẽ cần các biểu thức chính quy khác nhau. Vòng lặp bên ngoài, trên tất cả các dòng trong tệp, tất nhiên có thể được thực hiện theo nhiều cách. Phương pháp
for line in open[thefilepath]:1 là tốt, nhưng bạn cũng có thể sử dụng danh sách thu được bằng phương pháp
for line in open[thefilepath]:2, mô-đun thư viện chuẩn
for line in open[thefilepath]:3 hoặc trong Python 2. 2, thậm chí chỉ
for line in open[thefilepath]:
cái nào đơn giản và nhanh nhất
Trong Python 2. 2, nó thường là một ý tưởng hay để bọc các phép lặp dưới dạng các đối tượng lặp, phổ biến nhất là bởi các trình tạo đơn giản
from _ _future_ _ import generators def words_of_file[thefilepath]: for line in open[thefilepath]: for word in line.split[ ]: yield word for word in words_of_file[thefilepath]: dosomethingwith[word]
Cách tiếp cận này cho phép bạn tách biệt rõ ràng và hiệu quả hai mối quan tâm khác nhau. cách lặp lại tất cả các mục [trong trường hợp này là các từ trong một tệp] và phải làm gì với từng mục trong lần lặp. Khi bạn đã đóng gói gọn gàng các mối quan tâm về phép lặp trong một đối tượng trình lặp [thường, như ở đây, trình tạo], hầu hết việc sử dụng phép lặp của bạn trở thành các câu lệnh
for line in open[thefilepath]:4 đơn giản. Bạn có thể thường xuyên sử dụng lại trình vòng lặp ở nhiều điểm trong chương trình của mình và nếu cần bảo trì, thì bạn có thể thực hiện nó ở một nơi duy nhất—định nghĩa của trình vòng lặp—thay vì phải tìm mọi cách sử dụng. Do đó, các ưu điểm rất giống với những ưu điểm bạn có được, trong bất kỳ ngôn ngữ lập trình nào, bằng cách xác định và sử dụng các hàm một cách thích hợp thay vì sao chép và dán các đoạn mã ở khắp mọi nơi. Với Trăn 2. 2, bạn cũng có thể nhận được những lợi thế này cho các cấu trúc điều khiển lặp
Trong hướng dẫn ngắn này, chúng ta sẽ tìm hiểu cách truy xuất nội dung của tệp dưới dạng danh sách các từ bằng Python
Xác định nội dung tệp mẫu
Hãy bắt đầu bằng cách tạo một tệp mới với một số nội dung mẫu mà bạn có thể sử dụng để làm theo hướng dẫn này
from pathlib import Path
f_path = Path[r"C:\WorkDir\word_file.txt"]
f_path.write_text['This is our log file that we will parse using Python code.']
Điều này sẽ trả về số nguyên 58, là số ký tự trong văn bản chúng tôi đã viết
Nhập danh sách các từ từ tệp vào danh sách
Để tạo danh sách các từ trong tệp, chúng tôi sẽ sử dụng hai chức năng
- Đọc[]. đọc toàn bộ luồng tệp vào một đối tượng chuỗi
- Tách ra[]. phân chia một chuỗi thành một đối tượng danh sách. Trả về một danh sách
Chúng tôi cũng sẽ sử dụng khối with, khối này đảm nhiệm việc xử lý tệp và giúp chúng tôi không phải đóng tệp một cách rõ ràng sau khi đọc nó
with open[f_path, 'r'] as f_object:
word_lst = f_object.read[].split[]
Nếu chúng tôi in word_lst, chúng tôi sẽ nhận được một phân chia từng từ của tệp của chúng tôi
print [word_lst]
['This', 'is', 'our', 'log', 'file', 'that', 'we', 'will', 'parse', 'using', 'Python', 'code.']
Đọc nhiều dòng tệp từng từ
Chúng ta có thể sử dụng phương pháp đã nêu ở trên để chia các tệp nhiều dòng thành các từ. Nhưng nếu chúng ta muốn lấy một danh sách từng từ riêng biệt cho mỗi dòng/chuỗi trong tệp của mình thì sao?
for line in open[thefilepath]:5 cho phép bạn tạo tài liệu mới cũng như thay đổi tài liệu hiện có. Trên thực tế, nó chỉ cho phép bạn thay đổi các tài liệu hiện có;
Đặc điểm này là một đặc điểm mạnh mẽ. Phần lớn diện mạo của tài liệu được xác định bởi các phần còn lại khi bạn xóa tất cả nội dung. Những thứ như kiểu và đầu trang và chân trang được chứa riêng biệt với nội dung chính, cho phép bạn thực hiện nhiều tùy chỉnh trong tài liệu ban đầu của mình, sau đó xuất hiện trong tài liệu bạn tạo
Hãy cùng xem qua các bước để tạo tài liệu theo từng ví dụ, bắt đầu với hai thao tác chính bạn có thể thực hiện với tài liệu, mở tài liệu và lưu tài liệu
Mở tài liệu¶
Cách đơn giản nhất để bắt đầu là mở một tài liệu mới mà không chỉ định tệp để mở
from docx import Document document = Document[] document.save['test.docx']
Điều này tạo một tài liệu mới từ mẫu mặc định tích hợp sẵn và lưu nó không thay đổi vào một tệp có tên 'kiểm tra. docx'. Cái gọi là “mẫu mặc định” thực chất chỉ là một tệp Word không có nội dung, được lưu trữ cùng với gói
for line in open[thefilepath]:5 đã cài đặt. Nó gần giống như bạn nhận được bằng cách chọn mẫu Tài liệu Word sau khi chọn mục menu Tệp của Word > Mới từ Mẫu…
THỰC SỰ mở một tài liệu¶
Nếu bạn muốn kiểm soát nhiều hơn đối với tài liệu cuối cùng hoặc nếu bạn muốn thay đổi tài liệu hiện có, bạn cần mở một tài liệu có tên tệp
________số 8
Những điều cần lưu ý
- Bạn có thể mở bất kỳ tệp Word 2007 trở lên nào theo cách này [. doc từ Word 2003 trở về trước sẽ không hoạt động]. Mặc dù bạn có thể chưa thao tác được tất cả nội dung, nhưng bất cứ thứ gì đã có trong đó sẽ tải và lưu tốt. Bộ tính năng vẫn đang được xây dựng, vì vậy bạn chưa thể thêm hoặc thay đổi những thứ như tiêu đề hoặc chú thích cuối trang, nhưng nếu tài liệu có chúng thì
for line in open[thefilepath]:
5 đủ lịch sự để để yên và đủ thông minh để lưu chúng mà không thực sự hiểu chúng là gì - Nếu bạn sử dụng cùng một tên tệp để mở và lưu tệp,
for line in open[thefilepath]:
5 sẽ ngoan ngoãn ghi đè lên tệp gốc mà không cần nhìn trộm. Bạn sẽ muốn chắc chắn rằng đó là những gì bạn dự định
Mở tài liệu 'dạng tệp'¶
for line in open[thefilepath]:5 có thể mở một tài liệu từ cái gọi là đối tượng giống như tệp. Nó cũng có thể lưu vào một đối tượng giống như tệp. Điều này có thể hữu ích khi bạn muốn lấy tài liệu nguồn hoặc đích qua kết nối mạng hoặc từ cơ sở dữ liệu và không muốn [hoặc không được phép] tương tác với hệ thống tệp. Trong thực tế, điều này có nghĩa là bạn có thể chuyển một tệp đang mở hoặc đối tượng luồng StringIO/BytesIO để mở hoặc lưu tài liệu như vậy
f = open['foobar.docx', 'rb'] document = Document[f] f.close[] # or with open['foobar.docx', 'rb'] as f: source_stream = StringIO[f.read[]] document = Document[source_stream] source_stream.close[] ... target_stream = StringIO[] document.save[target_stream]
Tham số chế độ mở tệp
from _ _future_ _ import generators def words_of_file[thefilepath]: for line in open[thefilepath]: for word in line.split[ ]: yield word for word in words_of_file[thefilepath]: dosomethingwith[word]0 không bắt buộc trên tất cả các hệ điều hành. Nó mặc định là
from _ _future_ _ import generators def words_of_file[thefilepath]: for line in open[thefilepath]: for word in line.split[ ]: yield word for word in words_of_file[thefilepath]: dosomethingwith[word]1, đôi khi là đủ, nhưng 'b' [chọn chế độ nhị phân] là bắt buộc trên Windows và ít nhất một số phiên bản Linux để cho phép Zipfile mở tệp
Được rồi, vậy là bạn đã mở một tài liệu và khá chắc chắn rằng bạn có thể lưu nó ở đâu đó sau này. Bước tiếp theo là lấy một số nội dung trong đó…