Bạn cần mở tệp ở chế độ nối, bằng cách đặt "A" hoặc "AB" làm chế độ. Xem Open [].
Khi bạn mở với chế độ "A", vị trí ghi sẽ luôn ở cuối tệp [một phần phụ]. Bạn có thể mở với "A+" để cho phép đọc, tìm kiếm ngược và đọc [nhưng tất cả các chữ viết vẫn sẽ ở cuối tệp!].always be at the end of the file [an append]. You can open with "a+" to allow reading, seek backwards and read [but all writes will still be at the end of the file!].
Example:
>>> with open['test1','wb'] as f:
f.write['test']
>>> with open['test1','ab'] as f:
f.write['koko']
>>> with open['test1','rb'] as f:
f.read[]
'testkoko'
Lưu ý: Sử dụng 'A' không giống như mở bằng 'W' và tìm đến cuối tệp - hãy xem xét những gì có thể xảy ra nếu một chương trình khác mở tệp và bắt đầu viết giữa tìm kiếm và ghi. Trên một số hệ điều hành, việc mở tệp với 'A' đảm bảo rằng tất cả các ghi sau đây của bạn sẽ được nối lại một cách nguyên tử đến cuối tệp [ngay cả khi tệp phát triển bởi các ghi khác].: Using 'a' is not the same as opening with 'w' and seeking to the end of the file - consider what might happen if another program opened the file and started writing between the seek and the write. On some operating systems, opening the file with 'a' guarantees that all your following writes will be appended atomically to the end of the file [even as the file grows by other writes].
Một vài chi tiết về cách thức hoạt động của chế độ "A" [chỉ được kiểm tra trên Linux]. Ngay cả khi bạn tìm kiếm lại, mỗi lần ghi sẽ nối vào cuối tệp:
>>> f = open['test','a+'] # Not using 'with' just to simplify the example REPL session
>>> f.write['hi']
>>> f.seek[0]
>>> f.read[]
'hi'
>>> f.seek[0]
>>> f.write['bye'] # Will still append despite the seek[0]!
>>> f.seek[0]
>>> f.read[]
'hibye'
Trên thực tế, các trạng thái nhân lực
fseek[stream, 0, SEEK_END];
6:Mở một tệp ở chế độ phụ lục [A là ký tự đầu tiên của chế độ] khiến tất cả các hoạt động ghi tiếp theo cho luồng này xảy ra ở cuối tệp, như thể trước cuộc gọi:
fseek[stream, 0, SEEK_END];
Câu trả lời đơn giản hóa cũ [không sử dụng fseek[stream, 0, SEEK_END];
7]:
fseek[stream, 0, SEEK_END];
Ví dụ: [Trong một chương trình thực, sử dụng
fseek[stream, 0, SEEK_END];
7 để đóng tệp - xem tài liệu]use fseek[stream, 0, SEEK_END];
7 to close the file - see the documentation]>>> open["test","wb"].write["test"]
>>> open["test","a+b"].write["koko"]
>>> open["test","rb"].read[]
'testkoko'
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
>>> f = open['test','a+'] # Not using 'with' just to simplify the example REPL session
>>> f.write['hi']
>>> f.seek[0]
>>> f.read[]
'hi'
>>> f.seek[0]
>>> f.write['bye'] # Will still append despite the seek[0]!
>>> f.seek[0]
>>> f.read[]
'hibye'
1Cá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,
>>> f = open['test','a+'] # Not using 'with' just to simplify the example REPL session
>>> f.write['hi']
>>> f.seek[0]
>>> f.read[]
'hi'
>>> f.seek[0]
>>> f.write['bye'] # Will still append despite the seek[0]!
>>> f.seek[0]
>>> f.read[]
'hibye'
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 đó.
>>> f = open['test','a+'] # Not using 'with' just to simplify the example REPL session
>>> f.write['hi']
>>> f.seek[0]
>>> f.read[]
'hi'
>>> f.seek[0]
>>> f.write['bye'] # Will still append despite the seek[0]!
>>> f.seek[0]
>>> f.read[]
'hibye'
3Vì vậy, cách tiếp cận cuối cùng của chúng tôi nên như thế này,
>>> f = open['test','a+'] # Not using 'with' just to simplify the example REPL session
>>> f.write['hi']
>>> f.seek[0]
>>> f.read[]
'hi'
>>> f.seek[0]
>>> f.write['bye'] # Will still append despite the seek[0]!
>>> f.seek[0]
>>> f.read[]
'hibye'
4Mở tệp trong chế độ Phụ lục & Đọc [‘A+,]. Cả hai điểm con trỏ đọc và viết đến cuối tệp.
>>> f = open['test','a+'] # Not using 'with' just to simplify the example REPL session
>>> f.write['hi']
>>> f.seek[0]
>>> f.read[]
'hi'
>>> f.seek[0]
>>> f.write['bye'] # Will still append despite the seek[0]!
>>> f.seek[0]
>>> f.read[]
'hibye'
5Nó xác nhận rằng nó đã không nối thêm ‘\ n, trước khi viết một dòng mới vì tệp đã trống.
Bây giờ, hãy để lại một lần nữa, hãy nối một dòng khác vào cùng một tệp để kiểm tra xem nó có hoạt động tốt không,
>>> f = open['test','a+'] # Not using 'with' just to simplify the example REPL session
>>> f.write['hi']
>>> f.seek[0]
>>> f.read[]
'hi'
>>> f.seek[0]
>>> f.write['bye'] # Will still append despite the seek[0]!
>>> f.seek[0]
>>> f.read[]
'hibye'
6Nội dung của tệp ‘sample3.txt, ngay bây giờ,
>>> f = open['test','a+'] # Not using 'with' just to simplify the example REPL session
>>> f.write['hi']
>>> f.seek[0]
>>> f.read[]
'hi'
>>> f.seek[0]
>>> f.write['bye'] # Will still append despite the seek[0]!
>>> f.seek[0]
>>> f.read[]
'hibye'
7Vì tệp đã tồn tại và có nội dung quá; Do đó, trước tiên, nó đã thêm ‘\ n, vào tệp và sau đó là dòng đã cho của chúng tôi.
Nối nhiều dòng vào một tệp trong Python
Giả sử chúng ta có một danh sách chuỗi,
>>> f = open['test','a+'] # Not using 'with' just to simplify the example REPL session
>>> f.write['hi']
>>> f.seek[0]
>>> f.read[]
'hi'
>>> f.seek[0]
>>> f.write['bye'] # Will still append despite the seek[0]!
>>> f.seek[0]
>>> f.read[]
'hibye'
8Bâ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 [].
- Nếu phần tử đầu tiên của nó trong danh sách và phụ lục là sai
- Đó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à,
>>> f = open['test','a+'] # Not using 'with' just to simplify the example REPL session
>>> f.write['hi']
>>> f.seek[0]
>>> f.read[]
'hi'
>>> f.seek[0]
>>> f.write['bye'] # Will still append despite the seek[0]!
>>> f.seek[0]
>>> f.read[]
'hibye'
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,
>>> f = open['test','a+'] # Not using 'with' just to simplify the example REPL session
>>> f.write['hi']
>>> f.seek[0]
>>> f.read[]
'hi'
>>> f.seek[0]
>>> f.write['bye'] # Will still append despite the seek[0]!
>>> f.seek[0]
>>> f.read[]
'hibye'
7Chúng tôi có một danh sách các chuỗi,
fseek[stream, 0, SEEK_END];
1Chuẩ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,
fseek[stream, 0, SEEK_END];
2Bây giờ nội dung của tệp ‘sample3.txt, là,
fseek[stream, 0, SEEK_END];
3Nó đã 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,
fseek[stream, 0, SEEK_END];
4Đầu ra:
fseek[stream, 0, SEEK_END];
5