Hướng dẫn how do you append two lines in python? - làm thế nào để bạn nối hai dòng trong python?

Tệp của bạn được lưu trữ với các chuỗi có '\ n' ở giữa mỗi câu.

Để kết hợp các dòng, hãy mở tập tin của bạn. Đọc nội dung và phân chia các dòng để tạo thành một danh sách các chuỗi. Bây giờ hãy tham gia với họ với '' (không gian).

with open('sample.txt') as f:
    print(" ".join(f.read().splitlines()))

Để kết hợp mỗi hai dòng,

>>> with open('sample_log.txt') as f:
...     content = f.read().splitlines()                                         ... 
>>> 
>>> print "\n".join(" ".join(two_lines) for two_lines in zip(content[::2],content[1::2]))+(content[-1] if len(content)%2!=0 else '')

Ở đây, ví dụ, nếu

>>> content = ['a','b','c','d','e','f','g']                                     >>> zip(content[::2],content[1::2])
[('a', 'b'), ('c', 'd'), ('e', 'f')]
>>> [' '.join(twos) for twos in zip(content[::2],content[1::2])]
['a b', 'c d', 'e f']
>>> "\n".join(' '.join(twos) for twos in zip(content[::2],content[1::2]))
'a b\nc d\ne f'
>>> print "\n".join(' '.join(twos) for twos in zip(content[::2],content[1::2]))
a b
c d
e f
>>> print "\n".join(' '.join(twos) for twos in zip(content[::2],content[1::2])) + ("\n"+content[-1] if len(content)%2!=0 else '')
a b
c d
e f
g
>>> 

Nếu bạn chỉ muốn kết hợp hai dòng đầu tiên sau đó,

number_of_lines_to_combines=2
content=[]
with open('sample_log.txt') as f:
    for line in f.readlines():
        if number_of_lines_to_combines>0:
            number_of_lines_to_combines-=1
            content.append(line.rstrip()) #rstrip is used to get rid of new line
        else:
            content.append(line) # append with new line
print "".join(l)

Trong bài viết này, chúng tôi sẽ thảo luận về cách nối văn bản hoặc dòng mới vào một tệp hiện có bằng Python.


Để nối một số văn bản vào một tệp cuối cùng, trước tiên chúng ta cần mở tệp bằng chế độ truy cập,access mode ‘a’,

file_object = open('sample.txt', 'a')

Với chế độ truy cập tệp ‘A, hàm Open () trước tiên kiểm tra xem tệp có tồn tại hay không. Nếu tệp không tồn tại, thì nó sẽ tạo một tệp trống và mở nó. Trong khi đó, nếu tệp đã tồn tại thì nó sẽ mở nó. Trong cả hai trường hợp, nó trả về một đối tượng tệp và nó có chữ trỏ ghi, chỉ vào cuối tệp đã mở. Bây giờ, nếu bạn viết bất cứ điều gì vào tệp bằng đối tượng tệp này, thì nó sẽ được nối vào cuối.‘a’, open() function first checks if file exists or not. If the file doesn’t exist, then it creates an empty file and opens it. Whereas, if the file already exists then it opens it. In both cases, it returns a file object, and it has write cursor, which points to the end of the opened file. Now, if you write anything to the file using this file object, then it will be appended to the end.

Hãy để sử dụng nó để nối văn bản ở cuối tệp,

Giả sử chúng ta có một tệp ‘sample.txt, và nội dung của nó là,

Hello this is a sample file
It contains sample text
This is the end of file

Bây giờ, hãy để văn bản nối lại văn bản ‘Xin chào ở cuối tệp này,‘hello’ at the end of this file,

# Open a file with access mode 'a'
file_object = open('sample.txt', 'a')

# Append 'hello' at the end of file
file_object.write('hello')

# Close the file
file_object.close()

Nội dung của tệp ‘mẫu.txt, bây giờ sẽ là,

Hello this is a sample file
It contains sample text
This is the end of filehello

Chúng tôi đã mở tệp ‘sample.txt, trong chế độ phụ thuộc, tức là sử dụng chế độ truy cập‘ a. Vì con trỏ đã trỏ đến phần cuối của tệp trong đối tượng tệp, do đó khi chúng tôi truyền chuỗi trong hàm write (), nó đã thêm nó ở cuối tệp. Vì vậy, văn bản của chúng tôi ’Xin chào, được thêm vào cuối tệp‘ sample.txt.‘a’. As cursor was pointing to the end of the file in the file object, therefore when we passed the string in write() function, it appended it at the end of the file. So, our text ‘hello’ gets added at the end of the file ‘sample.txt’.

Nối thêm một văn bản vào tệp trong python bằng cách sử dụng câu lệnh mở

Chúng ta có thể mở tệp trong chế độ truy cập phụ lục, tức là ‘A, sử dụng‘ với câu lệnh mở, và sau đó chúng ta có thể nối thêm văn bản ở cuối tệp. Ví dụ,‘a’, using ‘with open’ statement too, and then we can append the text at the end of the file.
For example,

# Open a file with access mode 'a'
with open("sample.txt", "a") as file_object:
    # Append 'hello' at the end of file
    file_object.write("hello")

Nội dung của tệp ‘mẫu.txt, bây giờ sẽ là,

Hello this is a sample file
It contains sample text
This is the end of filehellohello

Chúng tôi đã mở tệp ‘sample.txt, trong chế độ phụ thuộc, tức là sử dụng chế độ truy cập‘ a. Vì con trỏ đã trỏ đến phần cuối của tệp trong đối tượng tệp, do đó khi chúng tôi truyền chuỗi trong hàm write (), nó đã thêm nó ở cuối tệp. Vì vậy, văn bản của chúng tôi ’Xin chào, được thêm vào cuối tệp‘ sample.txt. ‘hello’ gets again added at the end of file ‘sample.txt’.
The main difference between this approach and the previous one was that we don’t need to close the file explicitly. It gets automatically closed when the execution block of ‘with statement’ ends.

Nối thêm một văn bản vào tệp trong python bằng cách sử dụng câu lệnh mở

Chúng ta có thể mở tệp trong chế độ truy cập phụ lục, tức là ‘A, sử dụng‘ với câu lệnh mở, và sau đó chúng ta có thể nối thêm văn bản ở cuối tệp. Ví dụ,
Let’s see how to do that,

Văn bản ‘Xin chào, được thêm vào một lần nữa ở cuối tệp‘ sample.txt. Sự khác biệt chính giữa phương pháp này và phương pháp trước đó là chúng tôi không cần phải đóng tệp một cách rõ ràng. Nó sẽ tự động đóng khi khối thực thi của ‘với câu lệnh kết thúc.

Quảng cáo

Trong cả hai ví dụ trên, văn bản được thêm vào cuối tệp. Nhưng như chúng ta có thể thấy, nó không được thêm vào như một dòng mới. Có thể có các kịch bản khi chúng tôi muốn thêm dữ liệu vào một tệp dưới dạng dòng mới. Hãy để xem cách làm điều đó,

  • Nối dữ liệu vào tệp dưới dạng dòng mới trong Python
  • Giải pháp cho điều này là một chút khó khăn ở đây. Hãy bắt đầu với cách tiếp cận cơ bản và sau đó chúng ta sẽ thảo luận về nhược điểm trong đó và xem cách cải thiện nó,
  • Cách tiếp cận cơ bản
  • Mở tệp ở chế độ phụ lục (‘A,). Viết các điểm con trỏ vào cuối tập tin.

Nối thêm ‘\ n, ở cuối tệp bằng hàm write ()

Nối dòng đã cho vào tệp bằng hàm write ().

Đóng tệp

Cách tiếp cận này hoạt động tốt nếu tệp của chúng tôi đã tồn tại và đã có một số dữ liệu trong đó. Nhưng nếu tệp không tồn tại hoặc tệp trống thì cách tiếp cận này sẽ thất bại vì nội dung của tệp sẽ như thế này,

…………………… ..

  • Dòng được thêm mới
  • Đầu tiên nó viết một dòng trống và sau đó viết dòng của chúng tôi. Nhưng trong trường hợp này, chỉ có một dòng là tốt, chúng tôi không cần phải viết ‘\ n, trước đó.
  • Vì vậy, cách tiếp cận cuối cùng của chúng tôi nên như thế này,
  • Mở tệp trong chế độ Phụ lục & Đọc (‘A+,). Cả hai điểm con trỏ đọc và viết đến cuối tệp.
  • Di chuyển đọc con trỏ đến đầu tệp.
  • Mở tệp ở chế độ phụ lục (‘A,). Viết các điểm con trỏ vào cuối tập tin.

Nối thêm ‘\ n, ở cuối tệp bằng hàm write ()

Nối dòng đã cho vào tệp bằng hàm write ().‘sample2.txt’ with following contents,

Hello this is a sample file
It contains sample text
This is the end of file

Đóng tệp

>>> with open('sample_log.txt') as f:
...     content = f.read().splitlines()                                         ... 
>>> 
>>> print "\n".join(" ".join(two_lines) for two_lines in zip(content[::2],content[1::2]))+(content[-1] if len(content)%2!=0 else '')
1

Cách tiếp cận này hoạt động tốt nếu tệp của chúng tôi đã tồn tại và đã có một số dữ liệu trong đó. Nhưng nếu tệp không tồn tại hoặc tệp trống thì cách tiếp cận này sẽ thất bại vì nội dung của tệp sẽ như thế này,sample2.txt‘ now,

>>> with open('sample_log.txt') as f:
...     content = f.read().splitlines()                                         ... 
>>> 
>>> print "\n".join(" ".join(two_lines) for two_lines in zip(content[::2],content[1::2]))+(content[-1] if len(content)%2!=0 else '')
2

…………………… ..

Dòng được thêm mới
Initially, both read & write cursors will be pointing to the end of the file. We moved the read cursor to the top of file to check if the file is empty or not.
If the file is not empty, then append ‘\n’ at the end of the file first and then append the line.

Đầu tiên nó viết một dòng trống và sau đó viết dòng của chúng tôi. Nhưng trong trường hợp này, chỉ có một dòng là tốt, chúng tôi không cần phải viết ‘\ n, trước đó.

>>> with open('sample_log.txt') as f:
...     content = f.read().splitlines()                                         ... 
>>> 
>>> print "\n".join(" ".join(two_lines) for two_lines in zip(content[::2],content[1::2]))+(content[-1] if len(content)%2!=0 else '')
3

Vì vậy, cách tiếp cận cuối cùng của chúng tôi nên như thế này,

>>> with open('sample_log.txt') as f:
...     content = f.read().splitlines()                                         ... 
>>> 
>>> print "\n".join(" ".join(two_lines) for two_lines in zip(content[::2],content[1::2]))+(content[-1] if len(content)%2!=0 else '')
4

Mở tệp trong chế độ Phụ lục & Đọc (‘A+,). Cả hai điểm con trỏ đọc và viết đến cuối tệp.

>>> with open('sample_log.txt') as f:
...     content = f.read().splitlines()                                         ... 
>>> 
>>> print "\n".join(" ".join(two_lines) for two_lines in zip(content[::2],content[1::2]))+(content[-1] if len(content)%2!=0 else '')
5

Di chuyển đọc con trỏ đến đầu tệp.

Đọc một số văn bản từ tệp và kiểm tra xem tệp có trống hay không.

>>> with open('sample_log.txt') as f:
...     content = f.read().splitlines()                                         ... 
>>> 
>>> print "\n".join(" ".join(two_lines) for two_lines in zip(content[::2],content[1::2]))+(content[-1] if len(content)%2!=0 else '')
6

Mở tệp trong chế độ Phụ lục & Đọc (‘A+,). Cả hai điểm con trỏ đọc và viết đến cuối tệp.

>>> with open('sample_log.txt') as f:
...     content = f.read().splitlines()                                         ... 
>>> 
>>> print "\n".join(" ".join(two_lines) for two_lines in zip(content[::2],content[1::2]))+(content[-1] if len(content)%2!=0 else '')
7

Di chuyển đọc con trỏ đến đầu tệp.

Đọc một số văn bản từ tệp và kiểm tra xem tệp có trống hay không.

Giả sử chúng ta có một danh sách chuỗi,

>>> with open('sample_log.txt') as f:
...     content = f.read().splitlines()                                         ... 
>>> 
>>> print "\n".join(" ".join(two_lines) for two_lines in zip(content[::2],content[1::2]))+(content[-1] if len(content)%2!=0 else '')
8

Bây giờ chúng tôi muốn nối từng phần tử trong danh sách dưới dạng một dòng trong tệp. Làm thế nào để làm điều đó?

Chúng tôi có thể làm điều đó bằng cách gọi hàm trên được tạo trên append_new_line () nhiều lần, nhưng nó không phải là một giải pháp được tối ưu hóa vì nó sẽ mở và đóng tệp cho từng phần tử trong danh sách. Chúng ta chỉ nên mở tệp một lần và nối tất cả các dòng vào nó. Để làm điều đó thuật toán của chúng tôi sẽ như thế nào,append_new_line() multiple times, but it is not an optimized solution because it will open and close the file for each element in the list.
We should open the file only once and append all the lines to it. To do that our algorithm should be like,

  • Mở tệp trong chế độ Phụ lục & Đọc (‘A+,). Cả hai điểm con trỏ đọc và viết đến cuối tệp.
  • Di chuyển đọc con trỏ đến đầu tệp.
  • Đọc một số văn bản từ tệp và kiểm tra xem tệp có trống hay không.
  • Nếu tệp không trống, thì hãy đặt appendeol là đúngappendEOL as True else False
  • Bây giờ cho mỗi yếu tố trong danh sách
    • Nếu phần tử đầu tiên của nó trong danh sách và phụ lục là sai
      • Don lồng nối thêm ‘\ n, ở cuối tệp bằng hàm write ().
    • Khác
      • Nối thêm ‘\ n, ở cuối hàm sử dụng hàm write ().
    • Nối phần tử & nbsp; đến tệp bằng hàm write ().
  • Đóng tệp

Về cơ bản, chúng tôi không cần phải viết đầu tiên ‘\ n, nếu tệp trống.

Một chức năng để nối nhiều dòng trong một tệp là,

>>> with open('sample_log.txt') as f:
...     content = f.read().splitlines()                                         ... 
>>> 
>>> print "\n".join(" ".join(two_lines) for two_lines in zip(content[::2],content[1::2]))+(content[-1] if len(content)%2!=0 else '')
9

Bây giờ, hãy để sử dụng chức năng này. Giả sử nội dung của tệp ‘sample3.txt, như sau,
Suppose contents of file ‘sample3.txt’ is as follows,

>>> with open('sample_log.txt') as f:
...     content = f.read().splitlines()                                         ... 
>>> 
>>> print "\n".join(" ".join(two_lines) for two_lines in zip(content[::2],content[1::2]))+(content[-1] if len(content)%2!=0 else '')
7

Chúng tôi có một danh sách các chuỗi,

>>> content = ['a','b','c','d','e','f','g']                                     >>> zip(content[::2],content[1::2])
[('a', 'b'), ('c', 'd'), ('e', 'f')]
>>> [' '.join(twos) for twos in zip(content[::2],content[1::2])]
['a b', 'c d', 'e f']
>>> "\n".join(' '.join(twos) for twos in zip(content[::2],content[1::2]))
'a b\nc d\ne f'
>>> print "\n".join(' '.join(twos) for twos in zip(content[::2],content[1::2]))
a b
c d
e f
>>> print "\n".join(' '.join(twos) for twos in zip(content[::2],content[1::2])) + ("\n"+content[-1] if len(content)%2!=0 else '')
a b
c d
e f
g
>>> 
1

Chuẩn bị tất cả các chuỗi trong danh sách này dưới dạng các dòng riêng biệt ở cuối tệp ‘sample3.txt,

>>> content = ['a','b','c','d','e','f','g']                                     >>> zip(content[::2],content[1::2])
[('a', 'b'), ('c', 'd'), ('e', 'f')]
>>> [' '.join(twos) for twos in zip(content[::2],content[1::2])]
['a b', 'c d', 'e f']
>>> "\n".join(' '.join(twos) for twos in zip(content[::2],content[1::2]))
'a b\nc d\ne f'
>>> print "\n".join(' '.join(twos) for twos in zip(content[::2],content[1::2]))
a b
c d
e f
>>> print "\n".join(' '.join(twos) for twos in zip(content[::2],content[1::2])) + ("\n"+content[-1] if len(content)%2!=0 else '')
a b
c d
e f
g
>>> 
2

Bây giờ nội dung của tệp ‘sample3.txt, là,

>>> content = ['a','b','c','d','e','f','g']                                     >>> zip(content[::2],content[1::2])
[('a', 'b'), ('c', 'd'), ('e', 'f')]
>>> [' '.join(twos) for twos in zip(content[::2],content[1::2])]
['a b', 'c d', 'e f']
>>> "\n".join(' '.join(twos) for twos in zip(content[::2],content[1::2]))
'a b\nc d\ne f'
>>> print "\n".join(' '.join(twos) for twos in zip(content[::2],content[1::2]))
a b
c d
e f
>>> print "\n".join(' '.join(twos) for twos in zip(content[::2],content[1::2])) + ("\n"+content[-1] if len(content)%2!=0 else '')
a b
c d
e f
g
>>> 
3

Nó đã thêm tất cả các chuỗi trong danh sách đã cho là Newlines trong tệp.

Ví dụ hoàn chỉnh như sau,

>>> content = ['a','b','c','d','e','f','g']                                     >>> zip(content[::2],content[1::2])
[('a', 'b'), ('c', 'd'), ('e', 'f')]
>>> [' '.join(twos) for twos in zip(content[::2],content[1::2])]
['a b', 'c d', 'e f']
>>> "\n".join(' '.join(twos) for twos in zip(content[::2],content[1::2]))
'a b\nc d\ne f'
>>> print "\n".join(' '.join(twos) for twos in zip(content[::2],content[1::2]))
a b
c d
e f
>>> print "\n".join(' '.join(twos) for twos in zip(content[::2],content[1::2])) + ("\n"+content[-1] if len(content)%2!=0 else '')
a b
c d
e f
g
>>> 
4

Đầu ra:

>>> content = ['a','b','c','d','e','f','g']                                     >>> zip(content[::2],content[1::2])
[('a', 'b'), ('c', 'd'), ('e', 'f')]
>>> [' '.join(twos) for twos in zip(content[::2],content[1::2])]
['a b', 'c d', 'e f']
>>> "\n".join(' '.join(twos) for twos in zip(content[::2],content[1::2]))
'a b\nc d\ne f'
>>> print "\n".join(' '.join(twos) for twos in zip(content[::2],content[1::2]))
a b
c d
e f
>>> print "\n".join(' '.join(twos) for twos in zip(content[::2],content[1::2])) + ("\n"+content[-1] if len(content)%2!=0 else '')
a b
c d
e f
g
>>> 
5