Hướng dẫn python file write adding carriage return - tệp python ghi thêm ký tự xuống dòng

Tôi đang viết một loạt các câu lệnh SQL cho một tệp sử dụng Python. Chuỗi mẫu trông giống như:

store_insert = '\tinsert stores (storenum, ...) values (\'%s\', ...)'

Tôi đang viết cho tệp như vậy:

for line in source:
    line = line.rstrip()
    fields = line.split('\t')
    script.write(store_insert % tuple(fields))
    script.write(os.linesep)

Tuy nhiên, trong đầu ra kết quả, tôi thấy \ r \ r \ n ở cuối mỗi dòng, thay vì \ r \ n như tôi mong đợi. Tại sao?

Hướng dẫn python file write adding carriage return - tệp python ghi thêm ký tự xuống dòng

Silentghost

294K64 Huy hiệu vàng301 Huy hiệu bạc291 Huy hiệu Đồng64 gold badges301 silver badges291 bronze badges

Đã hỏi ngày 26 tháng 10 năm 2010 lúc 16:31Oct 26, 2010 at 16:31

5

\n được chuyển đổi thành os.linesep cho các tệp được mở trong chế độ văn bản. Vì vậy, khi bạn viết os.linesep vào tệp chế độ văn bản trên Windows, bạn viết \r\n\n được chuyển đổi dẫn đến \r\r\n.

Xem thêm các tài liệu:

Không sử dụng OS.LINEEP làm Kẻ hủy diệt dòng khi ghi các tệp được mở ở chế độ văn bản (mặc định); sử dụng một '\ n' thay thế, trên tất cả các nền tảng.

Đã trả lời ngày 26 tháng 10 năm 2010 lúc 16:57Oct 26, 2010 at 16:57

adwadwadw

4.74724 Huy hiệu bạc18 Huy hiệu đồng24 silver badges18 bronze badges

2

Với Python 3

open() giới thiệu tham số mới

for line in source:
    line = line.rstrip()
    fields = line.split('\t')
    script.write(store_insert % tuple(fields))
    script.write(os.linesep)
0 cho phép chỉ định một chuỗi mà bất kỳ sự xuất hiện nào của \n sẽ được dịch.

Vượt qua một đối số chuỗi trống

for line in source:
    line = line.rstrip()
    fields = line.split('\t')
    script.write(store_insert % tuple(fields))
    script.write(os.linesep)
2 Vô hiệu hóa bản dịch, để lại Char dòng mới. Chỉ hợp lệ cho chế độ văn bản.

Từ các tài liệu

Trên đầu ra, nếu Newline không có, bất kỳ ký tự '\ n' nào được dịch được dịch sang phân tách dòng mặc định của hệ thống, Os.LineSep. Nếu Newline là '', không có bản dịch nào diễn ra. Nếu Newline là bất kỳ giá trị pháp lý nào khác, bất kỳ ký tự '\ n' nào được viết thành chuỗi đã cho.

Đã trả lời ngày 20 tháng 12 năm 2016 lúc 17:25Dec 20, 2016 at 17:25

2

Các tệp văn bản có các kết thúc dòng khác nhau trên các hệ điều hành khác nhau, nhưng thuận tiện để làm việc với các chuỗi có ký tự kết thúc dòng nhất quán. Python kế thừa quy ước từ C của việc sử dụng

for line in source:
    line = line.rstrip()
    fields = line.split('\t')
    script.write(store_insert % tuple(fields))
    script.write(os.linesep)
3 làm ký tự kết thúc dòng phổ quát và dựa vào các chức năng đọc và ghi tệp để thực hiện chuyển đổi, nếu cần thiết. Các chức năng đọc và ghi biết để thực hiện điều này nếu tệp được mở ở chế độ
for line in source:
    line = line.rstrip()
    fields = line.split('\t')
    script.write(store_insert % tuple(fields))
    script.write(os.linesep)
4 mặc định. Nếu bạn thêm ký tự
for line in source:
    line = line.rstrip()
    fields = line.split('\t')
    script.write(store_insert % tuple(fields))
    script.write(os.linesep)
5 vào chuỗi chế độ khi mở tệp, bản dịch này sẽ bị bỏ qua.

Đã trả lời ngày 26 tháng 10 năm 2010 lúc 17:04Oct 26, 2010 at 17:04

Mark Ransommark RansomMark Ransom

290K40 Huy hiệu vàng384 Huy hiệu bạc608 Huy hiệu đồng40 gold badges384 silver badges608 bronze badges

Xem Open () Doc:

Ngoài chế độ giá trị fopen () tiêu chuẩn có thể là 'u' hoặc 'ru'. Python thường được xây dựng với sự hỗ trợ của Newline; Cung cấp 'u' mở tệp dưới dạng tệp văn bản, nhưng các dòng có thể bị chấm dứt bởi bất kỳ điều nào sau đây: quy ước cuối dòng '\ n', quy ước Macintosh '\ r' hoặc quy ước Windows '\ \ r \ n '. Tất cả các biểu diễn bên ngoài này được xem là '\ n' bởi chương trình Python. Nếu Python được xây dựng mà không có kết quả phổ quát, một chế độ có chế độ với 'U' giống như chế độ văn bản thông thường. Lưu ý rằng các đối tượng tệp được mở cũng có một thuộc tính gọi là Newlines không có giá trị không (nếu chưa thấy newlines nào), '\ n', '\ r', '\ r \ n' hoặc một bộ phận chứa tất cả Các loại đường mới được nhìn thấy.

Đã trả lời ngày 26 tháng 10 năm 2010 lúc 16:35Oct 26, 2010 at 16:35

Mouadmouadmouad

65.1K18 Huy hiệu vàng113 Huy hiệu bạc105 Huy hiệu đồng18 gold badges113 silver badges105 bronze badges

2

Làm việc cho tôi:

>>> import tempfile
>>> tmp = tempfile.TemporaryFile(mode="w+")
>>> store_insert = '\tinsert stores (storenum, ...) values (\'%s\', ...)'
>>> lines = ["foo\t\t"]
>>> for line in lines:
...     line = line.rstrip()
...     fields = line.split("\t")
...     tmp.write(store_insert % tuple(fields))
...     tmp.write(os.linesep)
...
>>> tmp.seek(0)
>>> tmp.read()
"\tinsert stores (storenum, ...) values ('foo', ...)\r\n"

Bạn có chắc đây là mã đang chạy, đó là những gì bạn nghĩ là, v.v.?

Đã trả lời ngày 26 tháng 10 năm 2010 lúc 16:45Oct 26, 2010 at 16:45

Hướng dẫn python file write adding carriage return - tệp python ghi thêm ký tự xuống dòng

KatrielkatrielKatriel

117K19 Huy hiệu vàng133 Huy hiệu bạc165 Huy hiệu Đồng19 gold badges133 silver badges165 bronze badges

Làm cách nào để chèn một chiếc xe ngựa trở lại trong Python?

Trong các chuỗi Python, dấu gạch chéo ngược "\" là một nhân vật đặc biệt, còn được gọi là nhân vật "Escape".Nó được sử dụng để thể hiện các ký tự khoảng trắng nhất định: "\ t" là một tab, "\ n" là một dòng mới và "\ r" là một sự trở lại vận chuyển."\r" is a carriage return.

Python viết có bao gồm dòng mới không?

Trong Python, ký tự dòng mới \ n, được sử dụng để tạo ra một dòng mới.the new line character “\n” is used to create a new line.

Viết () trả về cái gì trong Python?

Sự mô tả.Phương thức tệp python write () ghi một chuỗi str vào tệp.Không có giá trị quay lại.Do bộ đệm, chuỗi có thể không thực sự hiển thị trong tệp cho đến khi phương thức xả () hoặc đóng () được gọi.There is no return value. Due to buffering, the string may not actually show up in the file until the flush() or close() method is called.

Làm thế nào để bạn viết nhiều dòng trong một tệp văn bản trong Python?

Sử dụng hàm writeLines () Hàm này ghi đồng thời một số dòng chuỗi vào tệp văn bản.Một đối tượng có thể lặp lại, chẳng hạn như một danh sách, bộ, tuple, v.v., có thể được gửi đến phương thức writeLines (). This function writes several string lines to a text file simultaneously. An iterable object, such as a list, set, tuple, etc., can be sent to the writelines() method.