Hướng dẫn python read file line by line and write back - python đọc từng dòng tệp và ghi lại

Tôi muốn đọc tệp đầu vào, từng dòng, sau đó sửa đổi một dòng và ghi lại các thay đổi thành cùng một tệp

Vấn đề là, sau khi viết lại, tôi mất trở lại dòng và tôi có tất cả dữ liệu trong một dòng

open(bludescFilePath, 'a+') as blu:

blu_file_in_lines = blu.readlines()

for line in blu_file_in_lines:
                    if "Length" in line:
                        blu_file_in_lines[13] = line.replace("0x8000",str(size))

 with open(bludescFilePath, 'w') as blu:
                blu.write(str(blu_file_in_lines))

Đã hỏi ngày 30 tháng 1 năm 2019 lúc 17:41Jan 30, 2019 at 17:41

Hướng dẫn python read file line by line and write back - python đọc từng dòng tệp và ghi lại

1

CHỈNH SỬA

OK, những gì còn thiếu là vòng lặp.

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))

Đã trả lời ngày 30 tháng 1 năm 2019 lúc 17:56Jan 30, 2019 at 17:56

ValentinovalentinoValentino

7.1616 Huy hiệu vàng18 Huy hiệu bạc33 Huy hiệu đồng6 gold badges18 silver badges33 bronze badges

0

  1. Nhà
  2. Python: Cách đọc và ghi tệp

. Tìm hiểu khoa học dữ liệu bằng cách hoàn thành các thách thức mã hóa tương tác và xem video của các giảng viên chuyên gia. Bắt đầu bây giờ!


Cập nhật vào ngày 07 tháng 1 năm 2020


Trong bài đăng này, chúng tôi sẽ tìm hiểu cách đọc và ghi các tệp trong Python.

Làm việc với các tệp bao gồm ba bước sau:

  1. Mở tệp tin
  2. Thực hiện hoạt động đọc hoặc viết
  3. Đóng tệp

Hãy xem chi tiết xem từng bước một.

Các loại tệp #


Có hai loại tệp:

  1. Tệp văn bản
  2. Tập tin nhị phân

Một tệp văn bản chỉ đơn giản là một tệp lưu trữ các chuỗi ký tự bằng cách sử dụng mã hóa như UTF-8, Latin1, v.v., trong khi trong trường hợp dữ liệu tệp nhị phân được lưu trữ ở cùng định dạng như trong bộ nhớ máy tính.

Dưới đây là một số ví dụ về văn bản và tệp nhị phân:

Tệp văn bản: Mã nguồn Python, tệp HTML, tệp văn bản, tệp Markdown, v.v.

Tệp nhị phân: tệp thực thi, hình ảnh, âm thanh, v.v.

Điều quan trọng cần lưu ý là bên trong đĩa, cả hai loại tệp được lưu trữ dưới dạng chuỗi 1 và 0. Sự khác biệt duy nhất là khi một tệp văn bản được mở, dữ liệu được giải mã trở lại bằng cách sử dụng cùng một sơ đồ mã hóa, chúng được mã hóa. Tuy nhiên, trong trường hợp các tệp nhị phân không & nbsp; điều đó xảy ra.

Mở hàm - open () hàm #


Chức năng tích hợp

The caged bird sings
with a fearful trill
of things unknown
but longed for still
6 được sử dụng để mở tệp. Cú pháp của nó như sau:

open(filename, mode) -> file object

Khi thành công,

The caged bird sings
with a fearful trill
of things unknown
but longed for still
6 trả về một đối tượng tệp. Khi thất bại, nó tăng
The caged bird sings
with a fearful trill
of things unknown
but longed for still
8 hoặc lớp con.

Tranh luậnSự mô tả
The caged bird sings
with a fearful trill
of things unknown
but longed for still
9
Đường dẫn tuyệt đối hoặc tương đối của tập tin sẽ được mở.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
0
.

Sau đây là các giá trị có thể của chế độ.

Cách thứcSự mô tả
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
1
Mở tệp để đọc (mặc định).
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
2
Mở tệp để viết.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
3
Mở tệp ở chế độ phụ lục, tức là thêm dữ liệu mới vào cuối tệp.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
4
Mở tệp để đọc và viết cả hai
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
5
Mở tệp để viết, chỉ khi nó không tồn tại.

Chúng tôi cũng có thể nối các

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
6 hoặc
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
7 vào chuỗi chế độ để cho biết loại tệp chúng tôi sẽ làm việc.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
6 được sử dụng cho tệp văn bản và
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
7 cho các tệp nhị phân. Nếu không được chỉ định,
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
6 được giả định theo mặc định.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
0 là tùy chọn, nếu không được chỉ định thì tệp sẽ được mở dưới dạng tệp văn bản để chỉ đọc.

Điều này có nghĩa là ba cuộc gọi sau đây đến

The caged bird sings
with a fearful trill
of things unknown
but longed for still
6 là tương đương:

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')

Lưu ý rằng trước khi bạn có thể đọc một tệp, nó phải tồn tại, nếu không

The caged bird sings
with a fearful trill
of things unknown
but longed for still
6 sẽ tăng ngoại lệ
>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(3) # read the first 3 characters
'The'
>>>
>>> f.read() # read the remaining characters in the file.
' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n'
>>>
>>> f.read() # End of the file (EOF) is reached
''
>>>
>>> f.close()
>>>
4. Tuy nhiên, nếu bạn mở một tệp để viết (sử dụng chế độ như
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
2,
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
3 hoặc
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
4), Python sẽ tự động tạo tệp cho bạn. Nếu tệp đã tồn tại thì nội dung của nó sẽ bị xóa. Nếu bạn muốn ngăn chặn việc mở tệp ở chế độ
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
5.

Đóng phương thức tệp - đóng () #


Khi bạn hoàn thành làm việc với tệp, bạn nên đóng nó. Mặc dù, tệp được tự động đóng khi chương trình kết thúc nhưng nó vẫn là một thực tế tốt để làm điều đó một cách rõ ràng. Không đóng tệp trong một chương trình lớn có thể có vấn đề và thậm chí có thể khiến chương trình gặp sự cố.

Để đóng tệp, hãy gọi phương thức

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(3) # read the first 3 characters
'The'
>>>
>>> f.read() # read the remaining characters in the file.
' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n'
>>>
>>> f.read() # End of the file (EOF) is reached
''
>>>
>>> f.close()
>>>
9 của đối tượng tệp. Đóng tệp giải phóng các tài nguyên liên quan đến nó và xóa dữ liệu trong bộ đệm vào đĩa.

Con trỏ tệp #


Khi bạn mở một tệp thông qua phương thức

The caged bird sings
with a fearful trill
of things unknown
but longed for still
6. Hệ điều hành liên kết một con trỏ trỏ đến một ký tự trong tệp. Con trỏ tệp xác định từ nơi hoạt động đọc và ghi sẽ diễn ra. Ban đầu, con trỏ tệp chỉ vào đầu tệp và tiến bộ khi chúng tôi đọc và ghi dữ liệu vào tệp. Sau đó trong bài đăng này, chúng ta sẽ xem cách xác định vị trí hiện tại của con trỏ tệp và sử dụng nó để truy cập ngẫu nhiên các phần của tệp.

Đọc các tệp bằng cách đọc (), readline () và readlines () #


Để đọc dữ liệu, đối tượng tệp cung cấp các phương thức sau:

Phương phápTranh luận
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1
Đọc và trả về
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2 byte hoặc ít hơn (nếu không có đủ ký tự để đọc) từ tệp dưới dạng chuỗi. Nếu
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2 không được chỉ định, nó sẽ đọc toàn bộ tệp dưới dạng chuỗi và trả về nó.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
4
Đọc và trả về các ký tự cho đến khi kết thúc dòng được đạt được dưới dạng chuỗi.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
5
Đọc và trả về tất cả các dòng như một danh sách các chuỗi.

Khi kết thúc của tệp (EOF) đạt được các phương thức

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
6 và
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
4 trả về một chuỗi trống, trong khi
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
5 trả về một danh sách trống (
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
9).

Dưới đây là một số ví dụ:

poem.txt

The caged bird sings
with a fearful trill
of things unknown
but longed for still

Ví dụ 1: Sử dụng

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
6: Using
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
6

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(3) # read the first 3 characters
'The'
>>>
>>> f.read() # read the remaining characters in the file.
' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n'
>>>
>>> f.read() # End of the file (EOF) is reached
''
>>>
>>> f.close()
>>>

Ví dụ 2: Sử dụng

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
4: Using
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
4

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(4) # read first 4 characters
'The '
>>>
>>> f.readline() # read until the end of the line is reached
'caged bird sings\n'
>>>
>>> f.readline() # read the second line
'with a fearful trill\n'
>>>
>>> f.readline() # read the third line
'of things unknown\n'
>>>
>>> f.readline() # read the fourth line
'but longed for still'
>>>
>>> f.readline() # EOF reached
''
>>>
>>> f.close()
>>>

Ví dụ 3: Sử dụng

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
5: Using
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
5

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.readlines()
['The caged bird sings\n', 'with a fearful trill\n', 'of things unknown\n', 'but longed for still\n']
>>>
>>> f.readlines() # EOF reached
[]
>>>
>>> f.close()
>>>

Đọc tệp trong các đoạn #


Các phương thức

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
6 (không có đối số) và
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
5 đọc tất cả dữ liệu vào bộ nhớ cùng một lúc. Vì vậy, đừng sử dụng chúng để đọc các tệp lớn.

Một cách tiếp cận tốt hơn là đọc tệp trong các đoạn bằng cách sử dụng

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
6 hoặc đọc từng dòng tệp bằng cách sử dụng
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
4, như sau:

Ví dụ: Đọc tệp trong các khối: Reading file in chunks

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
0

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
1

Ví dụ: Đọc dòng tệp từng dòng: Reading file line by line

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
3

Thay vì sử dụng các phương thức

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
6 (với đối số) hoặc
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
4, bạn cũng có thể sử dụng đối tượng tệp để lặp lại nội dung của tệp một dòng tại một thời điểm.

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
4

Mã này tương đương với ví dụ trước nhưng nó ngắn gọn hơn, dễ đọc và dễ gõ hơn.

cảnh báo:

Coi chừng phương pháp

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
4, & nbsp; Nếu bạn gặp bất hạnh khi mở một tệp lớn mà không có bất kỳ dòng mới nào thì
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
4 không tốt hơn
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
6 (không có đối số). Điều tương tự cũng đúng khi bạn sử dụng đối tượng tệp làm trình lặp.

Viết dữ liệu bằng Write () và WriteLines () #


Để viết dữ liệu, đối tượng tệp cung cấp hai phương thức sau:

Phương phápSự mô tả
Tranh luận
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1
Đọc và trả về
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2 byte hoặc ít hơn (nếu không có đủ ký tự để đọc) từ tệp dưới dạng chuỗi. Nếu
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2 không được chỉ định, nó sẽ đọc toàn bộ tệp dưới dạng chuỗi và trả về nó.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
4

Đọc và trả về các ký tự cho đến khi kết thúc dòng được đạt được dưới dạng chuỗi.

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
5

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
6

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
5

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
7

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
8

Đọc và trả về tất cả các dòng như một danh sách các chuỗi.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

open(filename, mode) -> file object
0

Dưới đây là một ví dụ về phương pháp

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
00.

open(filename, mode) -> file object
1

open(filename, mode) -> file object
2

Phương thức

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
00 bên trong gọi phương thức
>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.readlines()
['The caged bird sings\n', 'with a fearful trill\n', 'of things unknown\n', 'but longed for still\n']
>>>
>>> f.readlines() # EOF reached
[]
>>>
>>> f.close()
>>>
7.

open(filename, mode) -> file object
3

Dưới đây là một ví dụ khác mở tập tin ở chế độ phụ lục.

open(filename, mode) -> file object
1

open(filename, mode) -> file object
5

Giả sử tệp

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
03 rất quan trọng để sử dụng và chúng tôi không muốn nó bị ghi đè. Để ngăn chặn việc mở tệp ở chế độ
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
5

open(filename, mode) -> file object
6

Chế độ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
5 chỉ mở tệp để viết, nếu nó không tồn tại.

Bộ đệm và Flushing #


Bộ đệm là quá trình lưu trữ dữ liệu tạm thời trước khi nó được chuyển đến một vị trí mới.

Trong trường hợp của các tệp, dữ liệu không được ghi ngay lập tức vào đĩa thay vào đó nó được lưu trữ trong bộ nhớ bộ đệm.

Lý do này đằng sau việc làm điều này là dữ liệu ghi vào đĩa cần có thời gian trái ngược với việc ghi dữ liệu vào bộ nhớ vật lý. Hãy tưởng tượng một chương trình viết dữ liệu mỗi khi phương thức

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.readlines()
['The caged bird sings\n', 'with a fearful trill\n', 'of things unknown\n', 'but longed for still\n']
>>>
>>> f.readlines() # EOF reached
[]
>>>
>>> f.close()
>>>
7 được gọi. Một chương trình như vậy sẽ rất chậm.

Khi chúng tôi sử dụng bộ đệm, dữ liệu chỉ được ghi vào đĩa khi bộ đệm trở nên đầy hoặc khi phương thức

>>>
>>> f = open("poem.txt", "r")
>>>
>>> f.read(3) # read the first 3 characters
'The'
>>>
>>> f.read() # read the remaining characters in the file.
' caged bird sings\nwith a fearful trill\nof things unknown\nbut longed for still\n'
>>>
>>> f.read() # End of the file (EOF) is reached
''
>>>
>>> f.close()
>>>
9 được gọi. Quá trình này được gọi là Flushing đầu ra. Bạn cũng có thể xóa đầu ra bằng cách sử dụng phương thức
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
08 của đối tượng tệp. Lưu ý rằng
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
08 chỉ lưu dữ liệu được đệm vào đĩa. Nó không đóng tệp.

Phương thức

The caged bird sings
with a fearful trill
of things unknown
but longed for still
6 cung cấp một đối số thứ ba tùy chọn để kiểm soát bộ đệm. Để tìm hiểu thêm về nó, hãy truy cập tài liệu chính thức.

Đọc và viết dữ liệu nhị phân #


Đọc và viết tệp nhị phân được thực hiện bằng cách nối

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
7 vào chuỗi chế độ.

Trong Python 3, dữ liệu nhị phân được biểu thị bằng cách sử dụng một loại đặc biệt gọi là

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
12.

Loại

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
12 đại diện cho một chuỗi số số bất biến trong khoảng từ 0 đến 255.

Hãy tạo một phiên bản nhị phân của bài thơ bằng cách đọc tệp

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
14.

open(filename, mode) -> file object
7

open(filename, mode) -> file object
8

Lưu ý rằng việc lập chỉ mục một đối tượng

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
12 trả về
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
16.

Hãy viết bài thơ nhị phân của chúng tôi trong một tập tin mới.

open(filename, mode) -> file object
9

Bài thơ nhị phân của chúng tôi hiện được viết vào tập tin. Để đọc nó, hãy mở tệp ở chế độ

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
17.

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
0

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
1

Điều quan trọng cần lưu ý là, trong trường hợp của chúng tôi, dữ liệu nhị phân có chứa các ký tự có thể in, như bảng chữ cái, Newline, v.v. Tuy nhiên, đây sẽ không phải là trường hợp hầu hết thời gian. Điều đó có nghĩa là với dữ liệu nhị phân, chúng ta không thể sử dụng một cách đáng tin cậy

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
4 và đối tượng tệp (làm trình lặp) để đọc nội dung của tệp vì có thể không phải là ký tự dòng mới trong tệp. Cách tốt nhất để đọc dữ liệu nhị phân là đọc nó bằng các khối bằng phương pháp
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
6.

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
0

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
3

Truy cập ngẫu nhiên bằng FSEEK () và FTELL () #


Trước đó trong bài đăng này, chúng tôi đã học được rằng khi tệp được mở, hệ thống liên kết một con trỏ với nó, xác định vị trí từ nơi đọc hoặc viết sẽ diễn ra.

Cho đến nay chúng tôi đã đọc và ghi các tập tin tuyến tính. Nhưng cũng có thể đọc và viết tại các vị trí cụ thể. Để đạt được điều này, đối tượng tệp cung cấp hai phương pháp sau:

Phương phápSự mô tả
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
20
Trả về vị trí hiện tại của con trỏ tệp.
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
21
Di chuyển con trỏ tệp đến
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
22 đã cho.
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
22 đề cập đến số byte và
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
24 xác định vị trí liên quan đến đó
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
22 sẽ di chuyển con trỏ tệp. Giá trị mặc định của
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
24 là 0, điều đó có nghĩa là bù sẽ di chuyển con trỏ tệp từ đầu tệp. Nếu được đặt thành
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
27 hoặc
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
28, phần bù sẽ di chuyển con trỏ của tệp từ vị trí hiện tại hoặc từ cuối tệp, tương ứng.

Hãy lấy một số ví dụ ngay bây giờ.

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
4

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
5

Sau khi đọc 5 ký tự, con trỏ tệp hiện đang ở ký tự

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
3 (trong Word
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
30). Vì vậy, hoạt động đọc (hoặc viết) tiếp theo sẽ bắt đầu từ thời điểm này.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
7

Bây giờ chúng tôi đã đến cuối tập tin. Tại thời điểm này, chúng ta có thể sử dụng phương thức

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
31 để tua lại con trỏ tệp đến đầu tệp, như sau:

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
8

Con trỏ tệp hiện đang ở đầu tệp. Tất cả các hoạt động đọc và viết từ bây giờ trở đi & nbsp; sẽ diễn ra từ đầu tệp một lần nữa.

# open file todo.md for reading in text mode

open('todo.md') 

open('todo.md', 'r')

open('todo.md', 'rt')
9

Để di chuyển con trỏ tệp từ 12 byte về phía trước từ vị trí hiện tại, hãy gọi

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
32 như sau:

The caged bird sings
with a fearful trill
of things unknown
but longed for still
0

Con trỏ tệp hiện đang ở ký tự

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
3 (sau từ
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
34), vì vậy hoạt động đọc và ghi sẽ diễn ra từ đó.

The caged bird sings
with a fearful trill
of things unknown
but longed for still
1

Chúng ta cũng có thể di chuyển con trỏ tệp ngược. Ví dụ: cuộc gọi sau đến

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
32 di chuyển con trỏ tệp 13 byte ngược từ vị trí hiện tại.

The caged bird sings
with a fearful trill
of things unknown
but longed for still
2

Giả sử chúng tôi muốn đọc 16 byte cuối cùng của tệp. Để làm như vậy, hãy di chuyển con trỏ tệp 16 byte lùi so với cuối tệp.

The caged bird sings
with a fearful trill
of things unknown
but longed for still
3

Các giá trị của đối số

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
24 của
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
31 cũng được định nghĩa là hằng số trong mô -đun
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
38.

Giá trịKhông thay đổi
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
39
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
40
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
27
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
42
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
28
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
44

với câu lệnh #


Tuyên bố với cho phép chúng tôi tự động đóng tệp sau khi chúng tôi hoàn thành làm việc với nó.Cú pháp của nó như sau:

The caged bird sings
with a fearful trill
of things unknown
but longed for still
4

Các câu lệnh bên trong câu lệnh

with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
34 phải được thụt vào như nhau giống như vòng lặp, nếu không
with open(bludescFilePath, 'w') as blu:
    for line in blu_file_in_lines:
        blu.write(str(line))
46 ngoại lệ sẽ được nêu ra.

Đây là một ví dụ:

The caged bird sings
with a fearful trill
of things unknown
but longed for still
5


Hướng dẫn khác (Nhà tài trợ)

Trang web này được hỗ trợ rộng rãi bởi DataCamp.DataCamp cung cấp các hướng dẫn Python tương tác trực tuyến cho khoa học dữ liệu.Tham gia hơn một triệu người học khác và bắt đầu học Python cho khoa học dữ liệu ngay hôm nay!