Hướng dẫn how do i add a line to the middle of a file in python? - làm cách nào để thêm một dòng vào giữa tệp trong python?

90

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Có cách nào để làm việc này không? Giả sử tôi có một tệp đó là danh sách các tên diễn ra như thế này:

  1. Alfred
  2. Hóa đơn
  3. Donald

Làm thế nào tôi có thể chèn tên thứ ba, "Charlie", ở dòng X (trong trường hợp này là 3) và tự động gửi tất cả những người khác xuống một dòng? Tôi đã thấy những câu hỏi khác như thế này, nhưng họ không nhận được câu trả lời hữu ích. Nó có thể được thực hiện, tốt nhất là với một phương thức hoặc một vòng lặp?

Khi được hỏi ngày 8 tháng 5 năm 2012 lúc 22:04May 8, 2012 at 22:04

Hướng dẫn how do i add a line to the middle of a file in python? - làm cách nào để thêm một dòng vào giữa tệp trong python?

3

Đây là một cách để thực hiện các mẹo.

with open("path_to_file", "r") as f:
    contents = f.readlines()

contents.insert(index, value)

with open("path_to_file", "w") as f:
    contents = "".join(contents)
    f.write(contents)

import os, fileinput

old = "A"
new = "B"

for line in fileinput.FileInput(file_path, inplace=True):
    if old in line :
        line += new + os.linesep
    print(line, end="")
1 và
import os, fileinput

old = "A"
new = "B"

for line in fileinput.FileInput(file_path, inplace=True):
    if old in line :
        line += new + os.linesep
    print(line, end="")
2 là dòng và giá trị bạn chọn, các dòng bắt đầu từ 0.

Hướng dẫn how do i add a line to the middle of a file in python? - làm cách nào để thêm một dòng vào giữa tệp trong python?

wjandrea

24.9k8 Huy hiệu vàng53 Huy hiệu bạc73 Huy hiệu đồng8 gold badges53 silver badges73 bronze badges

Đã trả lời ngày 8 tháng 5 năm 2012 lúc 22:10May 8, 2012 at 22:10

Martinchomartinchomartincho

4.2976 Huy hiệu vàng31 Huy hiệu bạc40 Huy hiệu đồng6 gold badges31 silver badges40 bronze badges

4

Nếu bạn muốn tìm kiếm một tệp cho một chuỗi con và thêm một văn bản mới vào dòng tiếp theo, một trong những cách thanh lịch để làm điều đó là như sau:

import os, fileinput

old = "A"
new = "B"

for line in fileinput.FileInput(file_path, inplace=True):
    if old in line :
        line += new + os.linesep
    print(line, end="")

Andyhasit

13.2K7 Huy hiệu vàng46 Huy hiệu bạc 50 Huy hiệu Đồng7 gold badges46 silver badges50 bronze badges

Đã trả lời ngày 20 tháng 10 năm 2015 lúc 14:38Oct 20, 2015 at 14:38

DavidsdavidsDavidS

2.0521 Huy hiệu vàng18 Huy hiệu bạc21 Huy hiệu đồng1 gold badge18 silver badges21 bronze badges

4

Có sự kết hợp các kỹ thuật mà tôi thấy hữu ích trong việc giải quyết vấn đề này:

with open(file, 'r+') as fd:
    contents = fd.readlines()
    contents.insert(index, new_string)  # new_string should end in a newline
    fd.seek(0)  # readlines consumes the iterator, so we need to start over
    fd.writelines(contents)  # No need to truncate as we are increasing filesize

Trong ứng dụng cụ thể của chúng tôi, chúng tôi muốn thêm nó sau một chuỗi nhất định:

with open(file, 'r+') as fd:
    contents = fd.readlines()
    if match_string in contents[-1]:  # Handle last line to prevent IndexError
        contents.append(insert_string)
    else:
        for index, line in enumerate(contents):
            if match_string in line and insert_string not in contents[index + 1]:
                contents.insert(index + 1, insert_string)
                break
    fd.seek(0)
    fd.writelines(contents)

Nếu bạn muốn nó chèn chuỗi sau mỗi phiên bản của trận đấu, thay vì chỉ là lần đầu tiên, hãy xóa

import os, fileinput

old = "A"
new = "B"

for line in fileinput.FileInput(file_path, inplace=True):
    if old in line :
        line += new + os.linesep
    print(line, end="")
3 (và không đồng nhất) và
import os, fileinput

old = "A"
new = "B"

for line in fileinput.FileInput(file_path, inplace=True):
    if old in line :
        line += new + os.linesep
    print(line, end="")
4.

Cũng lưu ý rằng

import os, fileinput

old = "A"
new = "B"

for line in fileinput.FileInput(file_path, inplace=True):
    if old in line :
        line += new + os.linesep
    print(line, end="")
5 ngăn không cho nó thêm nhiều bản sao sau
import os, fileinput

old = "A"
new = "B"

for line in fileinput.FileInput(file_path, inplace=True):
    if old in line :
        line += new + os.linesep
    print(line, end="")
6, do đó an toàn khi chạy nhiều lần.

Đã trả lời ngày 2 tháng 6 năm 2017 lúc 22:55Jun 2, 2017 at 22:55

Hướng dẫn how do i add a line to the middle of a file in python? - làm cách nào để thêm một dòng vào giữa tệp trong python?

TemporalwolftemporalwolfTemporalWolf

7.3621 Huy hiệu vàng31 Huy hiệu bạc46 Huy hiệu đồng1 gold badge31 silver badges46 bronze badges

3

Bạn chỉ có thể đọc dữ liệu vào một danh sách và chèn bản ghi mới nơi bạn muốn.

names = []
with open('names.txt', 'r+') as fd:
    for line in fd:
        names.append(line.split(' ')[-1].strip())

    names.insert(2, "Charlie") # element 2 will be 3. in your list
    fd.seek(0)
    fd.truncate()

    for i in xrange(len(names)):
        fd.write("%d. %s\n" %(i + 1, names[i]))

Đã trả lời ngày 8 tháng 5 năm 2012 lúc 22:13May 8, 2012 at 22:13

Jordanmjordanmjordanm

30,9K7 Huy hiệu vàng60 Huy hiệu bạc72 Huy hiệu đồng7 gold badges60 silver badges72 bronze badges

0

Câu trả lời được chấp nhận phải tải toàn bộ tệp vào bộ nhớ, không hoạt động độc đáo cho các tệp lớn. Giải pháp sau đây ghi nội dung tệp với dữ liệu mới được chèn vào dòng bên phải vào một tệp tạm thời trong cùng một thư mục (do đó trên cùng một hệ thống tệp), chỉ đọc các đoạn nhỏ từ tệp nguồn tại một thời điểm. Sau đó, nó ghi đè lên tệp nguồn với nội dung của tệp tạm thời theo cách hiệu quả (Python 3.8+).

from pathlib import Path
from shutil import copyfile
from tempfile import NamedTemporaryFile

sourcefile = Path("/path/to/source").resolve()
insert_lineno = 152  # The line to insert the new data into.
insert_data = "..."  # Some string to insert.

with sourcefile.open(mode="r") as source:
    destination = NamedTemporaryFile(mode="w", dir=str(sourcefile.parent))
    lineno = 1

    while lineno < insert_lineno:
        destination.file.write(source.readline())
        lineno += 1

    # Insert the new data.
    destination.file.write(insert_data)

    # Write the rest in chunks.
    while True:
        data = source.read(1024)
        if not data:
            break
        destination.file.write(data)

# Finish writing data.
destination.flush()
# Overwrite the original file's contents with that of the temporary file.
# This uses a memory-optimised copy operation starting from Python 3.8.
copyfile(destination.name, str(sourcefile))
# Delete the temporary file.
destination.close()

Chỉnh sửa 2020-09-08: Tôi vừa tìm thấy câu trả lời về đánh giá mã thực hiện một cái gì đó tương tự như ở trên với nhiều lời giải thích hơn-nó có thể hữu ích cho một số người.

Đã trả lời ngày 13 tháng 6 năm 2020 lúc 22:13Jun 13, 2020 at 22:13

SeanseanSean

1.28613 Huy hiệu bạc24 Huy hiệu đồng13 silver badges24 bronze badges

Bạn không cho chúng tôi thấy đầu ra sẽ trông như thế nào, vì vậy một cách giải thích có thể là bạn muốn đây là đầu ra:

  1. Alfred
  2. Hóa đơn
  3. Charlie
  4. Donald

Làm thế nào tôi có thể chèn tên thứ ba, "Charlie", ở dòng X (trong trường hợp này là 3) và tự động gửi tất cả những người khác xuống một dòng? Tôi đã thấy những câu hỏi khác như thế này, nhưng họ không nhận được câu trả lời hữu ích. Nó có thể được thực hiện, tốt nhất là với một phương thức hoặc một vòng lặp?

def insert_line(input_stream, pos, new_name, output_stream):
  inserted = False
  for line in input_stream:
    number, name = parse_line(line)
    if number == pos:
      print >> output_stream, format_line(number, new_name)
      inserted = True
    print >> output_stream, format_line(number if not inserted else (number + 1), name)

def parse_line(line):
  number_str, name = line.strip().split()
  return (get_number(number_str), name)

def get_number(number_str):
  return int(number_str.split('.')[0])

def format_line(number, name):
  return add_dot(number) + ' ' + name

def add_dot(number):
  return str(number) + '.'

input_stream = open('input.txt', 'r')
output_stream = open('output.txt', 'w')

insert_line(input_stream, 3, 'Charlie', output_stream)

input_stream.close()
output_stream.close()

Khi được hỏi ngày 8 tháng 5 năm 2012 lúc 22:04May 9, 2012 at 1:27

Đây là một cách để thực hiện các mẹo.redcurry

import os, fileinput

old = "A"
new = "B"

for line in fileinput.FileInput(file_path, inplace=True):
    if old in line :
        line += new + os.linesep
    print(line, end="")
1 và
import os, fileinput

old = "A"
new = "B"

for line in fileinput.FileInput(file_path, inplace=True):
    if old in line :
        line += new + os.linesep
    print(line, end="")
2 là dòng và giá trị bạn chọn, các dòng bắt đầu từ 0.2 gold badges23 silver badges35 bronze badges

  1. wjandrea
  2. 24.9k8 Huy hiệu vàng53 Huy hiệu bạc73 Huy hiệu đồng
  3. Đã trả lời ngày 8 tháng 5 năm 2012 lúc 22:10
  4. Martinchomartincho

Đã trả lời ngày 8 tháng 5 năm 2012 lúc 22:10May 8, 2012 at 22:10

Hướng dẫn how do i add a line to the middle of a file in python? - làm cách nào để thêm một dòng vào giữa tệp trong python?

MartinchomartinchoAbhranil Das

4.2976 Huy hiệu vàng31 Huy hiệu bạc40 Huy hiệu đồng6 gold badges34 silver badges42 bronze badges

1

location_of_line = 0
with open(filename, 'r') as file_you_want_to_read:
     #readlines in file and put in a list
     contents = file_you_want_to_read.readlines()

     #find location of what line you want to insert after
     for index, line in enumerate(contents):
            if line.startswith('whatever you are looking for')
                   location_of_line = index

#now you have a list of every line in that file
context.insert(location_of_line, "whatever you want to append to middle of file")
with open(filename, 'w') as file_to_write_to:
        file_to_write_to.writelines(contents)

Nếu bạn muốn tìm kiếm một tệp cho một chuỗi con và thêm một văn bản mới vào dòng tiếp theo, một trong những cách thanh lịch để làm điều đó là như sau:

Andyhasit

13.2K7 Huy hiệu vàng46 Huy hiệu bạc 50 Huy hiệu Đồng

Đã trả lời ngày 20 tháng 10 năm 2015 lúc 14:38

DavidsdavidsOct 21, 2019 at 5:55

2.0521 Huy hiệu vàng18 Huy hiệu bạc21 Huy hiệu đồng

line_index = 3
lines = None
with open('file.txt', 'r') as file_handler:
    lines = file_handler.readlines()

lines.insert(line_index, 'Charlie')

with open('file.txt', 'w') as file_handler:
    file_handler.writelines(lines)

Có sự kết hợp các kỹ thuật mà tôi thấy hữu ích trong việc giải quyết vấn đề này:Feb 5, 2019 at 12:55

Hướng dẫn how do i add a line to the middle of a file in python? - làm cách nào để thêm một dòng vào giữa tệp trong python?

Trong ứng dụng cụ thể của chúng tôi, chúng tôi muốn thêm nó sau một chuỗi nhất định:amrezzd

Nếu bạn muốn nó chèn chuỗi sau mỗi phiên bản của trận đấu, thay vì chỉ là lần đầu tiên, hãy xóa

import os, fileinput

old = "A"
new = "B"

for line in fileinput.FileInput(file_path, inplace=True):
    if old in line :
        line += new + os.linesep
    print(line, end="")
3 (và không đồng nhất) và
import os, fileinput

old = "A"
new = "B"

for line in fileinput.FileInput(file_path, inplace=True):
    if old in line :
        line += new + os.linesep
    print(line, end="")
4.14 silver badges35 bronze badges

Cũng lưu ý rằng

import os, fileinput

old = "A"
new = "B"

for line in fileinput.FileInput(file_path, inplace=True):
    if old in line :
        line += new + os.linesep
    print(line, end="")
5 ngăn không cho nó thêm nhiều bản sao sau
import os, fileinput

old = "A"
new = "B"

for line in fileinput.FileInput(file_path, inplace=True):
    if old in line :
        line += new + os.linesep
    print(line, end="")
6, do đó an toàn khi chạy nhiều lần.

Đã trả lời ngày 2 tháng 6 năm 2017 lúc 22:55 This code loads all the file into ram and rewrites content to the file

Temporalwolftemporalwolfstring and end with '\n' if you don't want it to mess with existing data.

with open("path_to_file", "r+") as f:
    # Read the content into a variable
    contents = f.readlines()
    contents.insert(index, value)
    
    # Reset the reader's location (in bytes)
    f.seek(0)
    
    # Rewrite the content to the file
    f.writelines(contents)

7.3621 Huy hiệu vàng31 Huy hiệu bạc46 Huy hiệu đồng

Bạn chỉ có thể đọc dữ liệu vào một danh sách và chèn bản ghi mới nơi bạn muốn.Mar 16 at 18:14

Hướng dẫn how do i add a line to the middle of a file in python? - làm cách nào để thêm một dòng vào giữa tệp trong python?

Đã trả lời ngày 8 tháng 5 năm 2012 lúc 22:13KlinZ

Jordanmjordanm4 bronze badges

30,9K7 Huy hiệu vàng60 Huy hiệu bạc72 Huy hiệu đồng

Bạn có thể để lại một bộ đệm của các ký tự null vô hình ('\ 0') tại vị trí chèn để ghi đè sau:

import os, fileinput

old = "A"
new = "B"

for line in fileinput.FileInput(file_path, inplace=True):
    if old in line :
        line += new + os.linesep
    print(line, end="")
0

Thật không may, không có cách nào để xóa-without-retplation bất kỳ ký tự null dư thừa nào không bị ghi đè (hoặc nói chung bất kỳ ký tự nào ở giữa một tệp), trừ khi bạn viết lại mọi thứ sau đó. Nhưng các ký tự null sẽ không ảnh hưởng đến cách tệp của bạn trông với con người (chúng có chiều rộng bằng không).

Đã trả lời ngày 16 tháng 7 năm 2019 lúc 18:26Jul 16, 2019 at 18:26

Hướng dẫn how do i add a line to the middle of a file in python? - làm cách nào để thêm một dòng vào giữa tệp trong python?

1

Làm cách nào để thêm một dòng mới vào một tệp văn bản 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. Bạn có thể in các chuỗi mà không cần thêm một dòng mới có kết thúc =, đó là ký tự sẽ được sử dụng để tách các dòng.\n . It is used to indicate the end of a line of text. You can print strings without adding a new line with end = , which is the character that will be used to separate the lines.

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

Sử dụng WriteLines () để viết nhiều dòng vào tệp sử dụng tệp. WriteLines (dòng) với các dòng dưới dạng chuỗi chuỗi để viết các chuỗi vào tệp. Thêm ký tự mới "\ n" vào cuối mỗi chuỗi để viết chúng trên các dòng riêng biệt, nếu không kết quả sẽ nằm trong một dòng. Use file. writelines(lines) with lines as a sequence of strings to write the strings to file . Add the newline character "\n" to the end of each string to write them on separate lines, otherwise the result will be in a single line.

Làm cách nào để thêm một dòng vào đầu tệp văn bản trong Python?

Nó chấp nhận một đường dẫn tệp và đường thẳng được chèn làm đối số ..
Tạo và mở một tệp tạm thời ở chế độ ghi ..
Thêm dòng đã cho làm dòng đầu tiên trong tệp tạm thời ..
Mở tệp gốc ở chế độ đọc và đọc nội dung của dòng tệp từng dòng. ....
Xóa tệp gốc ..
Đổi tên tệp tạm thời thành tệp gốc ..

Làm thế nào để bạn chỉnh sửa một dòng trong một tệp văn bản trong Python?

Sử dụng File.ReadLines () để chỉnh sửa một dòng cụ thể trong tệp văn bản Sử dụng Mở (Tệp, Chế độ) với Tệp dưới dạng Tên đường dẫn của Tệp và Chế độ là "R" để mở tệp để đọc.Tệp gọi.Readlines () để có được một danh sách chứa từng dòng trong tệp đã mở.Sử dụng lập chỉ mục danh sách để chỉnh sửa dòng ở một số dòng nhất định. readlines() to edit a specific line in text file Use open(file, mode) with file as the pathname of the file and mode as "r" to open the file for reading. Call file. readlines() to get a list containing each line in the opened file . Use list indexing to edit the line at a certain line number.