Mẫu
class FileListReader[object]:
def init[self, filenames]:
self.files = [open[i, "r"] for i in filenames]
def __enter__[self]:
for i in files:
i.__enter__[]
return self
def __exit__[self, exc_type, exc_value, traceback]:
for i in files:
i.__exit__[exc_type, exc_value, traceback]
7 là tốt, nhưng trong trường hợp này nó cản đường bạn. Bạn có thể mở danh sách các tệp, sau đó sử dụng danh sách đó bên trong class FileListReader[object]:
def init[self, filenames]:
self.files = [open[i, "r"] for i in filenames]
def __enter__[self]:
for i in files:
i.__enter__[]
return self
def __exit__[self, exc_type, exc_value, traceback]:
for i in files:
i.__exit__[exc_type, exc_value, traceback]
8:filenames = ["sample1/err_msdCECfortran_nvt.dat",...]
files = [open[i, "r"] for i in filenames]
for rows in izip[*files]:
# rows is now a tuple containing one row from each file
Trong Python 3.3+, bạn cũng có thể sử dụng
class FileListReader[object]:
def init[self, filenames]:
self.files = [open[i, "r"] for i in filenames]
def __enter__[self]:
for i in files:
i.__enter__[]
return self
def __exit__[self, exc_type, exc_value, traceback]:
for i in files:
i.__exit__[exc_type, exc_value, traceback]
9 trong khối filenames = ["sample1/err_msdCECfortran_nvt.dat",...]
with FileListReader[filenames] as f:
for rows in izip[*f.files]:
#...
0:filenames = ["sample1/err_msdCECfortran_nvt.dat",...]
with ExitStack[] as stack:
files = [stack.enter_context[open[i, "r"]] for i in filenames]
for rows in zip[*files]:
# rows is now a tuple containing one row from each file
Trong Python tổng năng lượng. Đặt tên cho tệp của bạn
filenames = ["sample1/err_msdCECfortran_nvt.dat",...]
with ExitStack[] as stack:
files = [stack.enter_context[open[i, "r"]] for i in filenames]
for rows in zip[*files]:
# rows is now a tuple containing one row from each file
00. Khi bạn mở nó, nó sẽ trông như thế này:class FileListReader[object]:
def init[self, filenames]:
self.files = [open[i, "r"] for i in filenames]
def __enter__[self]:
for i in files:
i.__enter__[]
return self
def __exit__[self, exc_type, exc_value, traceback]:
for i in files:
i.__exit__[exc_type, exc_value, traceback]
0filenames = ["sample1/err_msdCECfortran_nvt.dat",...]
with ExitStack[] as stack:
files = [stack.enter_context[open[i, "r"]] for i in filenames]
for rows in zip[*files]:
# rows is now a tuple containing one row from each file
01 chỉ ra rằng bạn sẽ có nhiều hàng hơn. Chúng tôi chỉ hiển thị 10 đầu tiên ở đây.Nếu bạn không chắc chắn nơi bắt đầu với nhiệm vụ này, hãy kiểm tra phần gợi ý!
Gợi ý
Nó giúp khi bạn viết mã để chia nhỏ những gì bạn phải làm thành các bước. Nhìn chung, chúng tôi muốn nhận thông tin từ tệp. làm sao chúng ta làm việc đó bây giờ?
Nếu bạn nghĩ về các bước bạn sẽ cần thực hiện nhiệm vụ này, bạn có thể đưa ra một danh sách như thế này, bạn có thể có một danh sách như
- Mở tệp để đọc
- Đọc dữ liệu trong tệp
- Vòng lặp qua các dòng trong tệp.
- Nhận thông tin từ dòng chúng tôi quan tâm.
- Viết thông tin vào một tập tin.
Nó có thể hữu ích khi bạn viết mã để viết ra các bước này và làm việc trên nó. Cố gắng viết mã bằng các bước này. Lưu ý rằng khi bạn viết mã, bạn có thể đưa ra các bước khác! Đầu tiên, điều về những gì bạn phải làm cho bước 1 và viết mã cho điều đó. Tiếp theo, hãy suy nghĩ về cách bạn sẽ làm Bước 2 và viết mã cho điều đó. Bạn có thể khắc phục sự cố mỗi bước bằng cách sử dụng các thống kê in. Các bước xây dựng lẫn nhau, vì vậy bạn có thể làm việc để có được từng tác phẩm được viết trước khi chuyển sang bước tiếp theo.
Dung dịch
Sau đây là một giải pháp tiềm năng, mặc dù bạn có thể đã đưa ra một giải pháp khác. Chỉ cần đảm bảo rằng tệp văn bản của bạn trông giống như giải pháp được đưa ra trong vấn đề Statememt.
Giải pháp này sẽ đi qua việc viết mã từng bước. Nếu bạn không muốn đi qua từng bước, chỉ cần bỏ qua đến cuối giải pháp.
Hãy để bắt đầu với các bước mà chúng tôi nghĩ đến trong gợi ý để viết mã này thành từng mảnh.
1class FileListReader[object]: def init[self, filenames]: self.files = [open[i, "r"] for i in filenames] def __enter__[self]: for i in files: i.__enter__[] return self def __exit__[self, exc_type, exc_value, traceback]: for i in files: i.__exit__[exc_type, exc_value, traceback]
Đối với Phần một, bạn sẽ nhận ra rằng bạn cần xây dựng một đường dẫn tệp trước khi mở. Chúng tôi cũng biết rằng nếu chúng tôi mở một tập tin, chúng tôi sẽ cần phải đóng nó. Sau khi chúng tôi xây dựng một đường dẫn tệp và mở tệp, mã của chúng tôi sẽ trông như thế này.
2class FileListReader[object]: def init[self, filenames]: self.files = [open[i, "r"] for i in filenames] def __enter__[self]: for i in files: i.__enter__[] return self def __exit__[self, exc_type, exc_value, traceback]: for i in files: i.__exit__[exc_type, exc_value, traceback]
Mã này sẽ không xuất hiện để làm bất cứ điều gì, nhưng nó xây dựng một filepath, mở một tệp, sau đó đóng tệp. Chạy nó sẽ cho phép chúng tôi xem liệu chúng tôi đã xây dựng chính xác FilePath của mình và để thấy rằng chúng tôi có thể mở và đóng tệp.
Bước thứ hai của chúng tôi là đọc dữ liệu trong tệp. Hãy nhớ lại rằng chúng tôi đã làm điều này sớm hơn với một chức năng gọi là
02. Nhớ lại từfilenames = ["sample1/err_msdCECfortran_nvt.dat",...] with ExitStack[] as stack: files = [stack.enter_context[open[i, "r"]] for i in filenames] for rows in zip[*files]: # rows is now a tuple containing one row from each file
02 rằng tệp sẽ cần được mở để thực hiện việc này, vì vậy chúng tôi sẽ thêm điều này trước khi chúng tôi sử dụng lệnhfilenames = ["sample1/err_msdCECfortran_nvt.dat",...] with ExitStack[] as stack: files = [stack.enter_context[open[i, "r"]] for i in filenames] for rows in zip[*files]: # rows is now a tuple containing one row from each file
04.filenames = ["sample1/err_msdCECfortran_nvt.dat",...] with ExitStack[] as stack: files = [stack.enter_context[open[i, "r"]] for i in filenames] for rows in zip[*files]: # rows is now a tuple containing one row from each file
3class FileListReader[object]: def init[self, filenames]: self.files = [open[i, "r"] for i in filenames] def __enter__[self]: for i in files: i.__enter__[] return self def __exit__[self, exc_type, exc_value, traceback]: for i in files: i.__exit__[exc_type, exc_value, traceback]
Chúng tôi biết rằng các đường đọc cung cấp cho chúng tôi một danh sách trong đó mọi dòng là một yếu tố của một danh sách. Chúng ta cần lặp qua các dòng trong tệp và chúng ta sẽ làm điều này bằng cách sử dụng vòng lặp
9.import library_name output = library_name.funtion_name[input]
Chúng tôi sẽ cần trích xuất thông tin từ các dòng, vì vậy hãy để Lôi đi trước và chia các dòng. Hãy để chỉ in cái này trước.
4class FileListReader[object]: def init[self, filenames]: self.files = [open[i, "r"] for i in filenames] def __enter__[self]: for i in files: i.__enter__[] return self def __exit__[self, exc_type, exc_value, traceback]: for i in files: i.__exit__[exc_type, exc_value, traceback]
Khi bạn kiểm tra đầu ra này, bạn sẽ phát hiện ra rằng nếu dòng chứa từ khóa của chúng tôi [
06], thì giá trị được liên kết sẽ là phần tửfilenames = ["sample1/err_msdCECfortran_nvt.dat",...] with ExitStack[] as stack: files = [stack.enter_context[open[i, "r"]] for i in filenames] for rows in zip[*files]: # rows is now a tuple containing one row from each file
07 trongfilenames = ["sample1/err_msdCECfortran_nvt.dat",...] with ExitStack[] as stack: files = [stack.enter_context[open[i, "r"]] for i in filenames] for rows in zip[*files]: # rows is now a tuple containing one row from each file
08 [hãy nhớ rằng việc đếm bắt đầu từ 0]. Hãy để in bản in đó.if the line contains our keyword [filenames = ["sample1/err_msdCECfortran_nvt.dat",...] with ExitStack[] as stack: files = [stack.enter_context[open[i, "r"]] for i in filenames] for rows in zip[*files]: # rows is now a tuple containing one row from each file
06], then the value associated will be elementfilenames = ["sample1/err_msdCECfortran_nvt.dat",...] with ExitStack[] as stack: files = [stack.enter_context[open[i, "r"]] for i in filenames] for rows in zip[*files]: # rows is now a tuple containing one row from each file
07 infilenames = ["sample1/err_msdCECfortran_nvt.dat",...] with ExitStack[] as stack: files = [stack.enter_context[open[i, "r"]] for i in filenames] for rows in zip[*files]: # rows is now a tuple containing one row from each file
08 [remember that counting starts at 0]. Let’s print that.filenames = ["sample1/err_msdCECfortran_nvt.dat",...] with ExitStack[] as stack: files = [stack.enter_context[open[i, "r"]] for i in filenames] for rows in zip[*files]: # rows is now a tuple containing one row from each file
5class FileListReader[object]: def init[self, filenames]: self.files = [open[i, "r"] for i in filenames] def __enter__[self]: for i in files: i.__enter__[] return self def __exit__[self, exc_type, exc_value, traceback]: for i in files: i.__exit__[exc_type, exc_value, traceback]
Bây giờ tất cả những gì còn lại là viết thông tin này vào một tệp. Chúng ta sẽ cần phải mở tệp trước vòng lặp, ghi vào nó bên trong vòng lặp và cuối cùng đóng nó bên ngoài vòng lặp. Giải pháp cuối cùng của chúng tôi là
6class FileListReader[object]: def init[self, filenames]: self.files = [open[i, "r"] for i in filenames] def __enter__[self]: for i in files: i.__enter__[] return self def __exit__[self, exc_type, exc_value, traceback]: for i in files: i.__exit__[exc_type, exc_value, traceback]
Những điểm chính
Sử dụng chức năng GLOB trong Thư viện Python để tìm tất cả các tệp bạn muốn phân tích.
Bạn có thể có nhiều vòng
9 lồng nhau trong nhau.import library_name output = library_name.funtion_name[input]
Python chỉ có thể in chuỗi vào các tập tin.
Don Tiết quên đóng các tập tin nên Python thực sự sẽ viết chúng.