Trong mô-đun csv trong python, có một hàm gọi là csv.reader
cho phép bạn lặp qua một hàng, trả về đối tượng trình đọc và có thể được giữ trong vùng chứa như danh sách.Xem giá trị hàng trong openpyxl
Vì vậy, khi danh sách được gán cho một biến và được in, ví dụ:
csv_rows = list(csv.reader(csvfile, delimiter=',', quotechar='|'))
print (csv_rows)
>
>
>
[['First Name', 'Last Name', 'Zodicac', 'Date of birth', 'Sex'] # I gave an example of the function outputting a header row
Cho đến nay, tôi không thấy một chức năng tương tự như thế này trong openpyxl. Tôi có thể nhầm lẫn nên tôi tự hỏi liệu có ai trong số các bạn có thể giúp tôi không.
Cập nhật
@alecxe, giải pháp của bạn hoạt động hoàn hảo (trừ đúc của nó ngày sinh của tôi như một định dạng datetime thay vì một chuỗi thường xuyên).
def iter_rows(ws):
for row in ws.iter_rows():
yield [cell.value for cell in row]
>
>
>>> pprint(list(iter_rows(ws)))
[['First Nam', 'Last Name', 'Zodicac', 'Date of birth', 'Sex'], ['John', 'Smith', 'Snake', datetime.datetime(1989, 9, 4, 0, 0), 'M']]
Kể từ khi tôi là một người mới bắt đầu tôi muốn biết làm thế nào điều này sẽ làm việc nếu tôi sử dụng một vòng lặp for thay vì một sự hiểu biết danh sách.
Vì vậy, tôi đã sử dụng này:
def iter_rows(ws):
result=[]
for row in ws.iter_rows()
for cell in row:
result.append(cell.value)
yield result
Nó gần mang lại cho tôi cùng một đầu ra chính xác, thay vào đó nó mang lại cho tôi điều này: Như bạn có thể nói, về cơ bản nó mang lại cho tôi một danh sách khổng lồ thay vì danh sách lồng nhau trong kết quả bạn đã cho tôi.
>>>print(list(iter_rows(ws)))
[['First Nam', 'Last Name', 'Zodicac', 'Date of birth', 'Sex', 'David', 'Yao', 'Snake', datetime.datetime(1989, 9, 4, 0, 0), 'M']]
Nếu có điều gì đó phù hợp với việc hiểu danh sách thì nó cũng sẽ hoạt động với danh sách. Sự khác biệt giữa hai là danh sách hiểu được tạo ra một danh sách cho mỗi hàng trong bảng tính. Nếu bạn muốn làm điều này trong giải pháp của bạn, bạn sẽ cần phải tạo một danh sách mới cho mỗi hàng và nối kết này vào kết quả. Không có lý do, tuy nhiên, không sử dụng một danh sách hiểu để làm điều này. –