Python đọc n dòng cuối cùng của tệp csv
Vòng lặp 37 được sử dụng để lặp qua từng phần tử của một lần lặp trong Python. Chúng ta có thể sử dụng vòng lặp 37 để lặp qua từng dòng bên trong tệp một cách tuần tự và sau đó đọc dòng cuối cùng của tệp. Đoạn mã sau chỉ cho chúng ta cách đọc dòng cuối cùng của tệp bằng vòng lặp 37 Show
đầu ra Chúng tôi đã mở tệp 40 ở chế độ 41 và sử dụng vòng lặp 37 để lặp qua từng dòng trong tệp. Chúng tôi đã sử dụng từ khóa 43 để giữ cho vòng lặp trống. Từ khóa 43 này hoạt động như một dòng trống trong Python và được sử dụng khi chúng ta không muốn viết bất kỳ mã nào bên trong vòng lặp hoặc câu lệnh điều kiện. Chúng tôi lưu trữ dòng cuối cùng bên trong biến 1 khi vòng lặp kết thúc và in giá trị của nóĐọc dòng cuối cùng của tệp với hàm with open('file.txt', 'r') as f: last_line = f.readlines()[-1] print(last_line) 2 trong PythonHàm 3 đọc tất cả các dòng của tệp và trả về chúng dưới dạng danh sách. Sau đó, chúng tôi có thể lấy dòng cuối cùng của tệp bằng cách tham chiếu chỉ mục cuối cùng của danh sách bằng cách sử dụng 4 làm chỉ mục. Ví dụ mã sau đây cho chúng ta biết cách đọc dòng cuối cùng của tệp bằng hàm 3 của Python
đầu ra Chúng tôi đã mở tệp 40 ở chế độ 41 và sử dụng 8 để đọc dòng cuối cùng của tệp. Chúng tôi đã sử dụng 9 vì hàm 2 trả về tất cả các dòng ở dạng danh sách và chỉ mục 9 này cung cấp cho chúng tôi phần tử cuối cùng của danh sách đóTrong Python, không có phương thức nào có thể đọc trực tiếp dòng cuối cùng của tệp. Vì vậy, chúng ta phải đọc toàn bộ tệp một cách tuần tự cho đến khi đến dòng cuối cùng. Phương thức đầu tiên đọc từng dòng tệp, trong khi phương thức thứ hai đọc tất cả các dòng cùng một lúc Định dạng được gọi là CSV (Giá trị được phân tách bằng dấu phẩy) là định dạng nhập và xuất phổ biến nhất cho bảng tính và cơ sở dữ liệu. Định dạng CSV đã được sử dụng trong nhiều năm trước khi cố gắng mô tả định dạng theo cách chuẩn hóa trong RFC 4180. Việc thiếu một tiêu chuẩn được xác định rõ ràng có nghĩa là những khác biệt tinh tế thường tồn tại trong dữ liệu được tạo ra và sử dụng bởi các ứng dụng khác nhau. Những khác biệt này có thể gây khó chịu khi xử lý tệp CSV từ nhiều nguồn. Tuy nhiên, trong khi các dấu phân cách và ký tự trích dẫn khác nhau, định dạng tổng thể tương tự nhau đủ để có thể viết một mô-đun duy nhất có thể thao tác dữ liệu đó một cách hiệu quả, ẩn các chi tiết đọc và ghi dữ liệu khỏi lập trình viên. Mô-đun 13 triển khai các lớp để đọc và ghi dữ liệu dạng bảng ở định dạng CSV. Nó cho phép các lập trình viên nói, "ghi dữ liệu này ở định dạng ưa thích của Excel" hoặc "đọc dữ liệu từ tệp này được tạo bởi Excel" mà không cần biết các chi tiết chính xác của định dạng CSV được sử dụng bởi Excel. Các lập trình viên cũng có thể mô tả các định dạng CSV mà các ứng dụng khác hiểu được hoặc xác định các định dạng CSV có mục đích đặc biệt của riêng họCác đối tượng 16 và 17 của mô-đun 13 đọc và ghi các trình tự. Các lập trình viên cũng có thể đọc và ghi dữ liệu ở dạng từ điển bằng cách sử dụng các lớp 18 và 19Xem thêm PEP 305 - API tệp CSVĐề xuất cải tiến Python đã đề xuất bổ sung này cho Python Nội dung mô-đun¶Mô-đun 13 xác định các chức năng saucsv. trình đọc(csvfile , phương ngữ='excel', **fmtparams)¶Trả về đối tượng trình đọc sẽ lặp qua các dòng trong tệp csv đã cho. csvfile có thể là bất kỳ đối tượng nào hỗ trợ giao thức iterator và trả về một chuỗi mỗi khi phương thức 81 của nó được gọi — file . Nếu csvfile là một đối tượng tệp, nó sẽ được mở bằng 82. 1 Có thể cung cấp một tham số phương ngữ tùy chọn được sử dụng để xác định một tập hợp các tham số dành riêng cho một phương ngữ CSV cụ thể. Nó có thể là một thể hiện của một lớp con của lớp 83 hoặc một trong các chuỗi được trả về bởi hàm 84. Các đối số từ khóa fmtparams tùy chọn khác có thể được cung cấp để ghi đè các tham số định dạng riêng lẻ trong phương ngữ hiện tại. Để biết chi tiết đầy đủ về phương ngữ và tham số định dạng, hãy xem phần and list objects are both suitable. If csvfile is a file object, it should be opened with 82. 1 An optional dialect parameter can be given which is used to define a set of parameters specific to a particular CSV dialect. It may be an instance of a subclass of the 83 class or one of the strings returned by the 84 function. The other optional fmtparams keyword arguments can be given to override individual formatting parameters in the current dialect. For full details about the dialect and formatting parameters, see section Phương ngữ và tham số định dạng . Mỗi hàng được đọc từ tệp csv được trả về dưới dạng danh sách các chuỗi. Không có chuyển đổi loại dữ liệu tự động nào được thực hiện trừ khi tùy chọn định dạng 85 được chỉ định (trong trường hợp đó, các trường không được trích dẫn sẽ được chuyển đổi thành số thực)Một ví dụ sử dụng ngắn 3csv. người viết(csvfile , phương ngữ='excel', **fmtparams)¶Trả về một đối tượng nhà văn chịu trách nhiệm chuyển đổi dữ liệu của người dùng thành các chuỗi được phân tách trên đối tượng giống như tệp đã cho. csvfile có thể là bất kỳ đối tượng nào với phương thức 86. Nếu csvfile là một đối tượng tệp, nó sẽ được mở bằng 82 1. Có thể cung cấp một tham số phương ngữ tùy chọn được sử dụng để xác định một tập hợp các tham số dành riêng cho một phương ngữ CSV cụ thể. Nó có thể là một thể hiện của một lớp con của lớp 83 hoặc một trong các chuỗi được trả về bởi hàm 84. Các đối số từ khóa fmtparams tùy chọn khác có thể được cung cấp để ghi đè các tham số định dạng riêng lẻ trong phương ngữ hiện tại. Để biết chi tiết đầy đủ về phương ngữ và tham số định dạng, hãy xem phần Phương ngữ và tham số định dạng . Để giao tiếp với các mô-đun triển khai API DB dễ dàng nhất có thể, giá trị 80 được viết dưới dạng chuỗi trống. Mặc dù đây không phải là phép chuyển đổi có thể đảo ngược, nhưng nó giúp kết xuất giá trị dữ liệu SQL NULL sang tệp CSV dễ dàng hơn mà không cần xử lý trước dữ liệu được trả về từ lệnh gọi 81. Tất cả dữ liệu không phải chuỗi khác được xâu chuỗi bằng 82 trước khi được ghi. Một ví dụ sử dụng ngắn 1csv. register_dialect(tên[ , dialect[, **fmtparams]])¶Liên kết phương ngữ với tên. tên phải là một chuỗi. Phương ngữ có thể được chỉ định bằng cách chuyển một lớp con của 83 hoặc bằng các đối số từ khóa fmtparams hoặc cả hai, với các đối số từ khóa ghi đè các tham số của phương ngữ. Để biết đầy đủ chi tiết về phương ngữ và tham số định dạng, hãy xem phần Phương ngữ và tham số định dạng . csv. unregister_dialect(tên) ¶Xóa phương ngữ được liên kết với tên khỏi sổ đăng ký phương ngữ. Một 84 được nâng lên nếu tên không phải là tên phương ngữ đã đăng kýcsv. get_dialect(tên) ¶Trả lại phương ngữ được liên kết với tên. Một 84 được nâng lên nếu tên không phải là tên phương ngữ đã đăng ký. Hàm này trả về một giá trị bất biến 83csv. list_dialects() ¶Trả lại tên của tất cả các phương ngữ đã đăng ký csv. field_size_limit([new_limit])¶Trả về kích thước trường tối đa hiện tại được trình phân tích cú pháp cho phép. Nếu new_limit được đưa ra, điều này sẽ trở thành giới hạn mới Mô-đun 13 định nghĩa các lớp saulớp csv. DictReader(f , tên trường=None, restkey=None, restval=None, dialect='excel', *args, **kwds)¶Tạo một đối tượng hoạt động như một trình đọc thông thường nhưng ánh xạ thông tin trong mỗi hàng tới một 88 có các khóa được cung cấp bởi tham số tên trường tùy chọnTham số tên trường là một trình tự . Nếu tên trường bị bỏ qua, các giá trị trong hàng đầu tiên của tệp f sẽ được sử dụng làm tên trường. Bất kể tên trường được xác định như thế nào, từ điển sẽ giữ nguyên thứ tự ban đầu của chúng. Nếu một hàng có nhiều trường hơn tên trường, dữ liệu còn lại sẽ được đưa vào danh sách và được lưu trữ với tên trường được chỉ định bởi phím đặt lại (mặc định là 80). Nếu một hàng không trống có ít trường hơn tên trường, thì các giá trị còn thiếu sẽ được điền vào bằng giá trị của restval (giá trị này mặc định là 80)Tất cả các đối số tùy chọn hoặc từ khóa khác được chuyển đến phiên bản 16 bên dướiĐã thay đổi trong phiên bản 3. 6. Các hàng được trả về hiện thuộc loại 12. Đã thay đổi trong phiên bản 3. 8. Các hàng được trả về hiện thuộc loại 88. Một ví dụ sử dụng ngắn 8lớp csv. DictWriter(f , tên trường, restval='', extrasaction='raise', dialect='excel', *args, **kwds)¶Tạo một đối tượng hoạt động giống như một trình ghi thông thường nhưng ánh xạ từ điển lên các hàng đầu ra. Tham số tên trường là một 14 khóa xác định thứ tự các giá trị trong từ điển được truyền cho phương thức 15 được ghi vào tệp f. Tham số restval tùy chọn chỉ định giá trị sẽ được ghi nếu từ điển thiếu khóa trong tên trường. Nếu từ điển được chuyển đến phương thức 15 chứa khóa không tìm thấy trong tên trường, tham số bổ sung tùy chọn cho biết hành động cần thực hiện. Nếu nó được đặt thành 17, giá trị mặc định, một 18 sẽ được nâng lên. Nếu nó được đặt thành 19, các giá trị bổ sung trong từ điển sẽ bị bỏ qua. Bất kỳ đối số tùy chọn hoặc từ khóa nào khác được chuyển đến đối tượng 17 bên dướiLưu ý rằng không giống như lớp 18, tham số tên trường của lớp 19 không phải là tùy chọnMột ví dụ sử dụng ngắn 8lớp csv. Phương ngữ ¶Lớp 83 là lớp chứa có thuộc tính chứa thông tin về cách xử lý dấu ngoặc kép, khoảng trắng, dấu phân cách, v.v. Do thiếu thông số kỹ thuật CSV nghiêm ngặt, các ứng dụng khác nhau tạo ra dữ liệu CSV khác nhau một cách tinh vi. Phiên bản 83 xác định cách hoạt động của phiên bản 16 và 17Tất cả các tên 83 có sẵn được trả về bởi 84 và chúng có thể được đăng ký với các lớp 16 và 17 cụ thể thông qua các hàm khởi tạo ( 21) của chúng như thế này 1lớp csv. excel ¶Lớp 22 xác định các thuộc tính thông thường của tệp CSV do Excel tạo. Nó được đăng ký với tên phương ngữ 23lớp csv. excel_tab ¶Lớp 24 xác định các thuộc tính thông thường của tệp được phân định bằng TAB do Excel tạo. Nó được đăng ký với tên phương ngữ 25lớp csv. unix_dialect ¶Lớp 26 định nghĩa các thuộc tính thông thường của tệp CSV được tạo trên hệ thống UNIX, tôi. e. sử dụng 27 làm dấu kết thúc dòng và trích dẫn tất cả các trường. Nó được đăng ký với tên phương ngữ 28Mới trong phiên bản 3. 2 lớp csv. Người đánh hơi ¶Lớp 29 được sử dụng để suy ra định dạng của tệp CSVLớp 29 cung cấp hai phương thứcsniff(mẫu , dấu phân cách=None)¶Phân tích mẫu đã cho và trả về một phân lớp 83 phản ánh các tham số được tìm thấy. Nếu tham số dấu phân cách tùy chọn được đưa ra, nó được hiểu là một chuỗi chứa các ký tự dấu phân cách hợp lệ có thể cóhas_header(mẫu) ¶Phân tích văn bản mẫu (được cho là ở định dạng CSV) và trả về 42 nếu hàng đầu tiên có vẻ là một loạt tiêu đề cột. Kiểm tra từng cột, một trong hai tiêu chí chính sẽ được xem xét để ước tính xem mẫu có chứa tiêu đề hay không
Hai mươi hàng sau hàng đầu tiên được lấy mẫu; Ghi chú Phương pháp này là một heuristic thô và có thể tạo ra cả dương tính giả và âm tính Một ví dụ cho việc sử dụng 29 7Mô-đun 13 xác định các hằng số saucsv. QUOTE_ALL ¶Hướng dẫn các đối tượng 17 trích dẫn tất cả các trườngcsv. QUOTE_MINIMAL ¶Hướng dẫn các đối tượng 17 chỉ trích dẫn những trường có chứa các ký tự đặc biệt như dấu phân cách, ký tự trích dẫn hoặc bất kỳ ký tự nào trong lineterminatorcsv. QUOTE_NONNUMERIC ¶Hướng dẫn các đối tượng 17 trích dẫn tất cả các trường không phải là sốHướng dẫn người đọc chuyển đổi tất cả các trường không được trích dẫn để nhập float csv. QUOTE_NONE ¶Hướng dẫn các đối tượng 17 không bao giờ trích dẫn các trường. Khi dấu phân cách hiện tại xuất hiện trong dữ liệu đầu ra, nó được bắt đầu bằng ký tự thoát hiện tại. Nếu ký tự thoát không được đặt, người viết sẽ tăng 84 nếu gặp phải bất kỳ ký tự nào yêu cầu thoátHướng dẫn 16 không thực hiện xử lý đặc biệt các ký tự trích dẫnMô-đun 13 xác định ngoại lệ saungoại lệ csv. Lỗi ¶Tăng lên bởi bất kỳ chức năng nào khi phát hiện lỗi Phương ngữ và tham số định dạng¶Để dễ dàng chỉ định định dạng của bản ghi đầu vào và đầu ra, các tham số định dạng cụ thể được nhóm lại với nhau thành các phương ngữ. Một phương ngữ là một lớp con của lớp 83 có một tập hợp các phương thức cụ thể và một phương thức 74 duy nhất. Khi tạo các đối tượng 16 hoặc 17, lập trình viên có thể chỉ định một chuỗi hoặc một lớp con của lớp 83 làm tham số phương ngữ. Ngoài, hoặc thay cho tham số phương ngữ, lập trình viên cũng có thể chỉ định các tham số định dạng riêng lẻ, có cùng tên với các thuộc tính được xác định bên dưới cho lớp 83Các phương ngữ hỗ trợ các thuộc tính sau Phương ngữ. dấu phân cách ¶Chuỗi một ký tự được sử dụng để phân tách các trường. Nó mặc định là 79Phương ngữ. trích dẫn kép ¶Kiểm soát cách các phiên bản của quotechar xuất hiện bên trong một trường sẽ được trích dẫn. Khi 42, ký tự được nhân đôi. Khi 41, ký tự thoát được sử dụng làm tiền tố cho ký tự trích dẫn. Nó mặc định là 42Ở đầu ra, nếu trích dẫn kép là 41 và không có ký tự thoát nào được đặt, thì 84 được nâng lên nếu tìm thấy ký tự trích dẫn trong một trườngPhương ngữ. ký tự thoát ¶Chuỗi một ký tự được người viết sử dụng để thoát khỏi dấu phân cách nếu trích dẫn được đặt thành 45 và ký tự trích dẫn nếu trích dẫn kép là 41. Khi đọc, ký tự thoát sẽ xóa mọi ý nghĩa đặc biệt khỏi ký tự sau. Nó mặc định là 80, vô hiệu hóa việc thoátĐã thay đổi trong phiên bản 3. 11. Không được phép sử dụng ký tự thoát rỗng. Phương ngữ. lineterminator ¶Chuỗi được sử dụng để kết thúc các dòng được tạo bởi 17. Nó mặc định là 49Ghi chú 16 được mã hóa cứng để nhận ra 101 hoặc 27 là cuối dòng và bỏ qua bộ kết thúc dòng. Hành vi này có thể thay đổi trong tương laiPhương ngữ. báo giá ¶Chuỗi một ký tự được sử dụng để trích dẫn các trường chứa ký tự đặc biệt, chẳng hạn như dấu phân cách hoặc ký tự trích dẫn hoặc chứa ký tự xuống dòng. Nó mặc định là 103Đã thay đổi trong phiên bản 3. 11. Không được phép sử dụng ký tự trích dẫn trống. Phương ngữ. trích dẫn ¶Kiểm soát thời điểm người viết tạo trích dẫn và người đọc nhận ra. Nó có thể nhận bất kỳ hằng số 104 nào (xem phần Nội dung mô-đun ) và mặc định là 105. Phương ngữ. bỏ qua dấu cách ¶Khi 42, khoảng trắng ngay sau dấu phân cách sẽ bị bỏ qua. Mặc định là 41Khi 42, tăng ngoại lệ 84 đối với đầu vào CSV không hợp lệ. Mặc định là 41Đối tượng người đọc¶Đối tượng reader (_______118 thể hiện và đối tượng được trả về bởi hàm 112) có các phương thức công khai saucsvreader. __next__() ¶Trả về hàng tiếp theo của đối tượng có thể lặp lại của trình đọc dưới dạng danh sách (nếu đối tượng được trả về từ 112) hoặc lệnh (nếu đó là phiên bản 18), được phân tích cú pháp theo 83 hiện tại. Thông thường bạn nên gọi đây là 116Đối tượng người đọc có các thuộc tính công khai sau csvreader. phương ngữ ¶Mô tả chỉ đọc của phương ngữ được trình phân tích cú pháp sử dụng csvreader. line_num ¶Số dòng được đọc từ trình lặp nguồn. Điều này không giống với số lượng bản ghi được trả về, vì bản ghi có thể trải rộng trên nhiều dòng Các đối tượng DictReader có thuộc tính public sau csvreader. tên trường ¶Nếu không được truyền dưới dạng tham số khi tạo đối tượng, thì thuộc tính này được khởi tạo khi truy cập lần đầu hoặc khi bản ghi đầu tiên được đọc từ tệp Đối tượng nhà văn¶Các đối tượng 117 (_______119 thể hiện và đối tượng được trả về bởi hàm 119) có các phương thức công khai sau. Một hàng phải là một chuỗi hoặc số có thể lặp lại đối với đối tượng 117 và tên trường ánh xạ từ điển thành chuỗi hoặc số (bằng cách chuyển chúng qua 82 trước) đối với đối tượng 19. Lưu ý rằng các số phức được viết ra bao quanh bởi dấu ngoặc đơn. Điều này có thể gây ra một số sự cố đối với các chương trình khác đọc tệp CSV (giả sử chúng hoàn toàn hỗ trợ các số phức)csvwriter. nhà văn(hàng) ¶Viết tham số hàng vào đối tượng tệp của người viết, được định dạng theo 83 hiện tại. Trả lại giá trị trả về của lệnh gọi phương thức ghi của đối tượng tệp bên dướiĐã thay đổi trong phiên bản 3. 5. Đã thêm hỗ trợ cho các lần lặp tùy ý. csvwriter. hàng viết(hàng) ¶Viết tất cả các thành phần trong hàng (một đối tượng hàng có thể lặp lại như được mô tả ở trên) vào đối tượng tệp của người viết, được định dạng theo phương ngữ hiện tại Các đối tượng nhà văn có thuộc tính công khai sau csvwriter. phương ngữ ¶Một mô tả chỉ đọc về phương ngữ được sử dụng bởi nhà văn Các đối tượng DictWriter có phương thức công khai sau DictWriter. tiêu đề ghi() ¶Viết một hàng có tên trường (như được chỉ định trong hàm tạo) vào đối tượng tệp của người viết, được định dạng theo phương ngữ hiện tại. Trả về giá trị trả về của cuộc gọi 124 được sử dụng nội bộMới trong phiên bản 3. 2 Đã thay đổi trong phiên bản 3. 8. ______1125 giờ đây cũng trả về giá trị được trả về bởi phương thức 124 mà nó sử dụng nội bộ. Ví dụ¶Ví dụ đơn giản nhất về đọc tệp CSV 2Đọc một tệp có định dạng thay thế 4Ví dụ viết đơn giản nhất có thể tương ứng là 7Vì 127 được sử dụng để mở tệp CSV để đọc, theo mặc định, tệp sẽ được giải mã thành unicode bằng cách sử dụng mã hóa mặc định của hệ thống (xem 128). Để giải mã tệp bằng mã hóa khác, hãy sử dụng đối số 129 của open 4Điều tương tự cũng áp dụng cho việc viết bằng thứ gì đó không phải là mã hóa mặc định của hệ thống. chỉ định đối số mã hóa khi mở tệp đầu ra |