Hướng dẫn what is newline in csv python? - dòng mới trong csv python là gì?

import csv

with open('test.csv', 'w') as outfile:
    writer = csv.writer(outfile, delimiter=',', quoting=csv.QUOTE_MINIMAL)
    writer.writerow(['hi', 'dude'])
    writer.writerow(['hi2', 'dude2'])

Mã trên tạo ra một tệp, test.csv, với thêm \r ở mỗi hàng, như vậy:

hi,dude\r\r\nhi2,dude2\r\r\n

thay vì dự kiến

hi,dude\r\nhi2,dude2\r\n

Tại sao điều này xảy ra, hoặc đây thực sự là hành vi mong muốn?

hỏi ngày 7 tháng 7 năm 2010 lúc 2:34Jul 7, 2010 at 2:34

Hướng dẫn what is newline in csv python? - dòng mới trong csv python là gì?

Apalopohapaapalopohapaapalopohapa

4.7135 huy hiệu vàng26 Huy hiệu bạc29 Huy hiệu đồng5 gold badges26 silver badges29 bronze badges

1

Python 3:

Tài liệu chính thức ____10 khuyến nghị

hi,dude\r\r\nhi2,dude2\r\r\n
1ing tệp với
hi,dude\r\r\nhi2,dude2\r\r\n
2 trên tất cả các nền tảng để vô hiệu hóa bản dịch Newlines phổ quát:

with open('output.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    ...

Người viết CSV chấm dứt từng dòng với

hi,dude\r\r\nhi2,dude2\r\r\n
3 của phương ngữ, đó là
hi,dude\r\r\nhi2,dude2\r\r\n
4 cho phương ngữ
hi,dude\r\r\nhi2,dude2\r\r\n
5 mặc định trên tất cả các nền tảng vì đó là những gì RFC 4180 đề xuất.


Python 2:

Trên Windows, luôn luôn mở các tệp của bạn ở chế độ nhị phân (

hi,dude\r\r\nhi2,dude2\r\r\n
6 hoặc
hi,dude\r\r\nhi2,dude2\r\r\n
7), trước khi chuyển chúng sang
hi,dude\r\r\nhi2,dude2\r\r\n
8 hoặc
hi,dude\r\r\nhi2,dude2\r\r\n
9.

Mặc dù tệp là một tệp văn bản, CSV được các thư viện coi là định dạng nhị phân, với các bản ghi phân tách

hi,dude\r\nhi2,dude2\r\n
0. Nếu bộ phân cách đó được viết ở chế độ văn bản, thời gian chạy Python sẽ thay thế
hi,dude\r\nhi2,dude2\r\n
1 bằng
hi,dude\r\nhi2,dude2\r\n
0, do đó
hi,dude\r\nhi2,dude2\r\n
3 được quan sát trong tệp.binary format by the libraries involved, with
hi,dude\r\nhi2,dude2\r\n
0 separating records. If that separator is written in text mode, the Python runtime replaces the
hi,dude\r\nhi2,dude2\r\n
1 with
hi,dude\r\nhi2,dude2\r\n
0, hence the
hi,dude\r\nhi2,dude2\r\n
3 observed in the file.

Xem câu trả lời trước đây.

Đã trả lời ngày 7 tháng 7 năm 2010 lúc 3:57Jul 7, 2010 at 3:57

John Machinjohn MachinJohn Machin

79,8K11 Huy hiệu vàng138 Huy hiệu bạc185 Huy hiệu đồng11 gold badges138 silver badges185 bronze badges

1

Trong khi @john-machin đưa ra một câu trả lời tốt, nhưng nó không phải lúc nào cũng là cách tiếp cận tốt nhất. Ví dụ, nó không hoạt động trên Python 3 trừ khi bạn mã hóa tất cả các đầu vào của mình cho người viết CSV. Ngoài ra, nó không giải quyết vấn đề nếu tập lệnh muốn sử dụng sys.stdout làm luồng.

Thay vào đó, tôi đề nghị thiết lập thuộc tính 'lineterminator' khi tạo người viết:

import csv
import sys

doc = csv.writer(sys.stdout, lineterminator='\n')
doc.writerow('abc')
doc.writerow(range(3))

Ví dụ đó sẽ hoạt động trên Python 2 và Python 3 và sẽ không tạo ra các ký tự dòng mới không mong muốn. Tuy nhiên, lưu ý rằng nó có thể tạo ra các dòng mới không mong muốn (bỏ qua ký tự LF trên các hệ điều hành UNIX).

Tuy nhiên, trong hầu hết các trường hợp, tôi tin rằng hành vi thích hợp hơn và tự nhiên hơn so với coi tất cả CSV là định dạng nhị phân. Tôi cung cấp câu trả lời này như một sự thay thế cho sự xem xét của bạn.

Hướng dẫn what is newline in csv python? - dòng mới trong csv python là gì?

Stevoisiak

21.5K26 Huy hiệu vàng118 Huy hiệu bạc208 Huy hiệu đồng26 gold badges118 silver badges208 bronze badges

Đã trả lời ngày 18 tháng 7 năm 2013 lúc 13:59Jul 18, 2013 at 13:59

Jason R. Coombsjason R. CoombsJason R. Coombs

39,9k10 Huy hiệu vàng80 Huy hiệu bạc88 Huy hiệu đồng10 gold badges80 silver badges88 bronze badges

6

Trong Python 3 (tôi chưa thử điều này trong Python 2), bạn cũng có thể chỉ cần làm

with open('output.csv','w',newline='') as f:
    writer=csv.writer(f)
    writer.writerow(mystuff)
    ...

theo tài liệu.

Thêm về điều này trong chú thích của tài liệu:

Nếu newline = '' không được chỉ định, các dòng newlines được nhúng bên trong các trường được trích dẫn sẽ không được giải thích chính xác và trên các nền tảng sử dụng các lớp lót \ r \ n trên viết thêm một \ r sẽ được thêm vào. Luôn luôn an toàn để chỉ định newline = '', vì mô -đun CSV thực hiện xử lý dòng mới (phổ quát) của riêng mình.

Đã trả lời ngày 18 tháng 3 năm 2015 lúc 7:43Mar 18, 2015 at 7:43

2

Bạn có thể giới thiệu tham số lineterminator = '\ n' trong lệnh CSV Writer.lineterminator='\n' parameter in the csv writer command.

import csv
delimiter='\t'
with open('tmp.csv', '+w', encoding='utf-8') as stream:
    writer = csv.writer(stream, delimiter=delimiter, quoting=csv.QUOTE_NONE, quotechar='',  lineterminator='\n')
    writer.writerow(['A1' , 'B1', 'C1'])
    writer.writerow(['A2' , 'B2', 'C2'])
    writer.writerow(['A3' , 'B3', 'C3'])

Đã trả lời ngày 9 tháng 10 năm 2017 lúc 10:21Oct 9, 2017 at 10:21

Wesam Nawesam NaWesam Na

2.04923 Huy hiệu bạc22 Huy hiệu đồng23 silver badges22 bronze badges

1

Bạn phải thêm thuộc tính newline = "\ n" để mở chức năng như thế này:

with open('file.csv','w',newline="\n") as out:
    csv_out = csv.writer(out, delimiter =';')

Đã trả lời ngày 1 tháng 6 năm 2017 lúc 20:41Jun 1, 2017 at 20:41

Hướng dẫn what is newline in csv python? - dòng mới trong csv python là gì?

Gregor Ažbegregor ažbeGregor Ažbe

3537 Huy hiệu bạc12 Huy hiệu Đồng7 silver badges12 bronze badges

2

Lưu ý rằng nếu bạn sử dụng DictWriter, bạn sẽ có một dòng mới từ hàm mở và một dòng mới từ hàm Writerow. Bạn có thể sử dụng newline = '' trong hàm mở để xóa thêm dòng mới.

Đã trả lời ngày 23 tháng 10 năm 2017 lúc 21:39Oct 23, 2017 at 21:39

Erick Stoneerick StoneErick Stone

7691 Huy hiệu vàng6 Huy hiệu bạc16 Huy hiệu đồng1 gold badge6 silver badges16 bronze badges

3

Newline có nghĩa là gì trong Python?

Nhân vật dòng mới trong Python là \ n.Nó được sử dụng để chỉ ra sự kết thúc của một dòng văn bản.used to indicate the end of a line of text.

CSV có dòng mới không?

Các ký tự dòng mới (Tham khảo: https://en.wikipedia.org/wiki/Newline.) Nếu bạn tải lên tệp CSV chứa các ký tự dòng mới trong các trường khác ngoài trường Vùng văn bản, nó sẽ được lưu vào hệ thống nhưng chỉTrường khu vực văn bản bảo tồn dòng mới nếu bạn chỉnh sửa tài sản.

Tầm quan trọng của Newline là gì?

Nhân vật NewLine rất quan trọng trong lập trình máy tính, vì nó cho phép các lập trình viên tìm kiếm các lỗi dòng trong các tệp văn bản.Ví dụ: nếu một tệp dữ liệu liệt kê một phần tử trên mỗi dòng, các mục có thể được phân định bởi các ký tự mới.allows programmers to search for line breaks in text files. For example, if a data file lists one element per line, the items can be delimited by newline characters.

Giá trị mặc định của đối số Newline trong khi mở tệp CSV là gì?

Nếu CSVFILE là đối tượng tệp, nó sẽ được mở bằng newline = '' 1. Một tham số phương ngữ tùy chọn có thể được cung cấp được sử dụng để xác định một tập hợp các tham số cụ thể cho một phương ngữ CSV cụ thể.='' 1. An optional dialect parameter can be given which is used to define a set of parameters specific to a particular CSV dialect.