Hướng dẫn remove last newline from file python - xóa dòng mới cuối cùng khỏi tệp python

Tôi đã nhìn xung quanh Stackoverflow và không thể tìm thấy câu trả lời cho câu hỏi cụ thể của tôi vì vậy hãy tha thứ cho tôi nếu tôi đã bỏ lỡ điều gì đó.

import re

target = open('output.txt', 'w')

for line in open('input.txt', 'r'):
    match = re.search(r'Stuff', line)
    if match:
        match_text = match.group()
        target.write(match_text + '\n')
    else:
        continue
target.close()

Tệp tôi đang phân tích cú pháp là rất lớn nên cần phải xử lý từng dòng.

Điều này (tất nhiên) để lại một dòng mới ở cuối tệp.

Làm thế nào tôi nên thay đổi tốt nhất mã này để trên lần lặp cuối cùng của vòng lặp 'nếu khớp', nó không đặt ký tự dòng phụ ở cuối tệp. Nó có nên nhìn qua tệp một lần nữa ở cuối và xóa dòng cuối cùng (mặc dù có vẻ hơi không hiệu quả)?

Các câu hỏi StackOverflow hiện có tôi đã tìm thấy bìa Xóa tất cả các dòng mới khỏi một tệp.

Nếu có một cách pythonic / hiệu quả hơn để viết mã này, tôi cũng sẽ hoan nghênh các đề xuất cho việc học của riêng tôi.

Cảm ơn đã giúp đỡ!

Hỏi ngày 9 tháng 8 năm 2013 lúc 2:50Aug 9, 2013 at 2:50

Hướng dẫn remove last newline from file python - xóa dòng mới cuối cùng khỏi tệp python

Fusilli Jerryfusilli JerryFusilli Jerry

7354 Huy hiệu vàng8 Huy hiệu bạc16 Huy hiệu đồng4 gold badges8 silver badges16 bronze badges

3

Một điều khác bạn có thể làm, là truncate tệp. .tell() cung cấp cho chúng tôi số byte hiện tại trong tệp. Sau đó, chúng tôi trừ đi một, và cắt ngắn nó ở đó để loại bỏ dòng mới.

with open('a.txt', 'w') as f:
    f.write('abc\n')
    f.write('def\n')
    f.truncate(f.tell()-1)

Trên Linux và MacOS,

with open('a.txt', 'w') as f:
    f.write('abc\n')
    f.write('def\n')
    f.truncate(f.tell()-1)
0 là chính xác, nhưng trên Windows, nó cần phải là
with open('a.txt', 'w') as f:
    f.write('abc\n')
    f.write('def\n')
    f.truncate(f.tell()-1)
1. Một phương pháp pythonic hơn để xác định cái nào là kiểm tra
with open('a.txt', 'w') as f:
    f.write('abc\n')
    f.write('def\n')
    f.truncate(f.tell()-1)
2.

import os
remove_chars = len(os.linesep)

with open('a.txt', 'w') as f:
    f.write('abc\n')
    f.write('def\n')
    f.truncate(f.tell() - remove_chars)

Câu trả lời của Kindal cũng hợp lệ, ngoại trừ bạn nói rằng đó là một tệp lớn. Phương pháp này sẽ cho phép bạn xử lý một tệp có kích thước terabyte trên một gigabyte của ram.'s answer is also valid, with the exception that you said it's a large file. This method will let you handle a terabyte sized file on a gigabyte of RAM.

Đã trả lời ngày 9 tháng 8 năm 2013 lúc 3:07Aug 9, 2013 at 3:07

Hướng dẫn remove last newline from file python - xóa dòng mới cuối cùng khỏi tệp python

Viết dòng mới của mỗi dòng ở đầu dòng tiếp theo. Để tránh viết một dòng mới ở đầu dòng đầu tiên, hãy sử dụng một biến được khởi tạo thành một chuỗi trống và sau đó đặt thành một dòng mới trong vòng lặp.

import re

with open('input.txt') as source, open('output.txt', 'w') as target:

    newline = ''
    for line in source:
        match = re.search(r'Stuff', line)
        if match:
            target.write(newline + match.group())
            newline = '\n'

Tôi cũng đã tái cấu trúc mã của bạn một chút (không cần thiết

with open('a.txt', 'w') as f:
    f.write('abc\n')
    f.write('def\n')
    f.truncate(f.tell()-1)
3, bởi vì vòng lặp sẽ làm gì khác?) Và thay đổi nó để sử dụng câu lệnh
with open('a.txt', 'w') as f:
    f.write('abc\n')
    f.write('def\n')
    f.truncate(f.tell()-1)
4 để các tệp được tự động đóng.

Đã trả lời ngày 9 tháng 8 năm 2013 lúc 2:55Aug 9, 2013 at 2:55

Kindallkindallkindall

173K34 Huy hiệu vàng268 Huy hiệu bạc 301 Huy hiệu đồng34 gold badges268 silver badges301 bronze badges

0

Đường dẫn ngắn nhất từ ​​những gì bạn có đến những gì bạn muốn có lẽ là lưu trữ kết quả trong danh sách, sau đó tham gia danh sách với Newlines và viết nó vào tệp.

import re

target = open('output.txt', 'w')
results = []

for line in open('input.txt', 'r'):
    match = re.search(r'Stuff', line)
    if match:
        results.append(match.group())
target.write("\n".join(results))
target.close()

Voilà, không có thêm dòng mới ở đầu hoặc kết thúc. Có thể không quy mô rất tốt của danh sách kết quả là rất lớn. (Và giống như Kindall, tôi đã rời khỏi

with open('a.txt', 'w') as f:
    f.write('abc\n')
    f.write('def\n')
    f.truncate(f.tell()-1)
5)

Đã trả lời ngày 9 tháng 8 năm 2013 lúc 3:00Aug 9, 2013 at 3:00

Sean Redmondsean RedmondSean Redmond

3,82421 Huy hiệu bạc28 Huy hiệu đồng21 silver badges28 bronze badges

2

Vì bạn đang thực hiện cùng một Regex, bạn có thể muốn biên dịch nó trước đó.

import re
prog = re.compile(r'Stuff')

Tôi có xu hướng nhập từ và đầu ra đến

with open('a.txt', 'w') as f:
    f.write('abc\n')
    f.write('def\n')
    f.truncate(f.tell()-1)
6 và
with open('a.txt', 'w') as f:
    f.write('abc\n')
    f.write('def\n')
    f.truncate(f.tell()-1)
7 để đơn giản. Nhưng đó là một vấn đề của hương vị (và thông số kỹ thuật).

from sys import stdin, stdout

Bỏ qua yêu cầu cụ thể về việc loại bỏ ____ 18 18 [1] cuối cùng, và chỉ giải quyết bit về việc học của bạn, toàn bộ điều có thể được viết như thế này:

from itertools import imap
stdout.writelines(match.group() for match in imap(prog.match, stdin) if match)

[1] Như những người khác đã nhận xét, đây là một điều xấu, và thật khó chịu khi ai đó làm điều này.

Đã trả lời ngày 9 tháng 8 năm 2013 lúc 5:09Aug 9, 2013 at 5:09

Hướng dẫn remove last newline from file python - xóa dòng mới cuối cùng khỏi tệp python

Antakantakantak

18.1k8 Huy hiệu vàng68 Huy hiệu bạc78 Huy hiệu đồng8 gold badges68 silver badges78 bronze badges

2

Làm thế nào để tôi thoát khỏi dòng mới cuối cùng trong Python?

Phương pháp 1: Sử dụng hàm thay thế để xóa ký tự dòng mới khỏi chuỗi trong Python ..
Phương pháp 2: Sử dụng hàm Dải () để xóa ký tự dòng mới khỏi chuỗi trong Python ..
Phương pháp 4: Sử dụng RE. hàm sub () để xóa một ký tự dòng mới khỏi chuỗi trong python ..

Có phải dải Python loại bỏ Newline?

Dải () loại bỏ python newline?Chức năng Dải () của Python có thể xóa \ n, một ký tự dòng mới, khỏi một chuỗi.Hàm Dải () có thể loại bỏ cả các ký tự dòng mới và hàng đầu khỏi chuỗi gốc.Python's strip() function can remove \n, a newline character, from a string. The strip() function can remove both trailing and leading newline characters from the original string.

Làm cách nào để loại bỏ dòng mới mặc định trong Python?

Để in mà không có dòng mới trong Python, bạn cần thêm một đối số bổ sung cho chức năng in của mình sẽ cho chương trình biết rằng bạn không muốn chuỗi tiếp theo của mình trên một dòng mới.Đây là một ví dụ: in ("Xin chào!", End = '') in ("Đó là một ngày tuyệt vời.")add an extra argument to your print function that will tell the program that you don't want your next string to be on a new line. Here's an example: print("Hello there!", end = '') print("It is a great day.")

Làm cách nào để loại bỏ ký tự dòng mới trong một tệp văn bản?

Trong menu Tệp, nhấp vào Tìm kiếm và sau đó thay thế. Trong hộp thay thế, trong tìm phần nào, nhập ^\ r \ n (năm ký tự: CARET, Backslash 'r' và Backslash 'n').Để trống thay thế với trống trừ khi bạn muốn thay thế một dòng trống bằng văn bản khác. In the Replace box, in the Find what section, type ^\r\n (five characters: caret, backslash 'r', and backslash 'n'). Leave the Replace with section blank unless you want to replace a blank line with other text.