Độ bền dữ liệu Python - API tệp

Python sử dụng tích hợp sẵn input()print()chức năng để thực hiện các hoạt động đầu vào / đầu ra tiêu chuẩn. Hàm input () đọc byte từ thiết bị dòng nhập chuẩn, tức là bàn phím.

Các print()mặt khác, gửi dữ liệu tới thiết bị dòng đầu ra tiêu chuẩn tức là màn hình hiển thị. Chương trình Python tương tác với các thiết bị IO này thông qua các đối tượng luồng tiêu chuẩnstdinstdout được định nghĩa trong mô-đun sys.

Các input()hàm thực sự là một trình bao bọc xung quanh phương thức readline () của đối tượng sys.stdin. Tất cả các tổ hợp phím từ luồng nhập liệu được nhận cho đến khi nhấn phím 'Enter'.

>>> import sys
>>> x=sys.stdin.readline()
Welcome to TutorialsPoint
>>> x
'Welcome to TutorialsPoint\n'

Lưu ý rằng, readline()hàm để lại một ký tự '\ n' ở cuối. Ngoài ra còn có một phương thức read () đọc dữ liệu từ luồng đầu vào tiêu chuẩn cho đến khi nó được kết thúc bởiCtrl+D tính cách.

>>> x=sys.stdin.read()
Hello
Welcome to TutorialsPoint
>>> x
'Hello\nWelcome to TutorialsPoint\n'

Tương tự, print() là một hàm tiện lợi mô phỏng phương thức write () của đối tượng stdout.

>>> x='Welcome to TutorialsPoint\n'
>>> sys.stdout.write(x)
Welcome to TutorialsPoint
26

Cũng giống như các đối tượng dòng được xác định trước stdin và stdout, một chương trình Python có thể đọc dữ liệu từ và gửi dữ liệu đến tệp đĩa hoặc ổ cắm mạng. Chúng cũng là những dòng suối. Bất kỳ đối tượng nào có phương thức read () là một luồng đầu vào. Bất kỳ đối tượng nào có phương thức write () là một luồng đầu ra. Giao tiếp với luồng được thiết lập bằng cách lấy tham chiếu đến đối tượng luồng với hàm open () tích hợp sẵn.

hàm open ()

Hàm dựng sẵn này sử dụng các đối số sau:

f=open(name, mode, buffering)

Tham số tên, là tên của tệp đĩa hoặc chuỗi byte, chế độ là chuỗi một ký tự tùy chọn để chỉ định loại hoạt động sẽ được thực hiện (đọc, ghi, nối thêm, v.v.) và tham số đệm là 0, 1 hoặc -1 cho biết bộ đệm đang tắt, bật hoặc mặc định của hệ thống.

Chế độ mở tệp được liệt kê như bảng dưới đây. Chế độ mặc định là 'r'

Sr.No Thông số & Mô tả
1

R

Mở để đọc (mặc định)

2

W

Mở để ghi, cắt bớt tệp trước

3

X

Tạo một tệp mới và mở nó để viết

4

A

Mở để ghi, nối vào cuối tệp nếu nó tồn tại

5

B

Chế độ nhị phân

6

T

Chế độ văn bản (mặc định)

7

+

Mở tệp đĩa để cập nhật (đọc và ghi)

Để lưu dữ liệu vào tệp, nó phải được mở bằng chế độ 'w'.

f=open('test.txt','w')

Đối tượng tệp này hoạt động như một luồng đầu ra và có quyền truy cập vào phương thức write (). Phương thức write () gửi một chuỗi đến đối tượng này và được lưu trữ trong tệp bên dưới nó.

string="Hello TutorialsPoint\n"
f.write(string)

Điều quan trọng là phải đóng luồng, để đảm bảo rằng mọi dữ liệu còn lại trong bộ đệm được chuyển hoàn toàn sang nó.

file.close()

Hãy thử và mở 'test.txt' bằng bất kỳ trình chỉnh sửa thử nghiệm nào (chẳng hạn như notepad) để xác nhận việc tạo tệp thành công.

Để đọc nội dung của 'test.txt' theo chương trình, nó phải được mở ở chế độ 'r'.

f=open('test.txt','r')

Đối tượng này hoạt động như một luồng đầu vào. Python có thể tìm nạp dữ liệu từ luồng bằng cách sử dụngread() phương pháp.

string=f.read()
print (string)

Nội dung của tệp được hiển thị trên bảng điều khiển Python. Đối tượng Tệp cũng hỗ trợreadline() phương thức có thể đọc chuỗi cho đến khi nó gặp ký tự EOF.

Tuy nhiên, nếu cùng một tệp được mở ở chế độ 'w' để lưu trữ văn bản bổ sung trong đó, nội dung trước đó sẽ bị xóa. Bất cứ khi nào, một tệp được mở với quyền ghi, nó được coi như thể đó là một tệp mới. Để thêm dữ liệu vào tệp hiện có, hãy sử dụng 'a' cho chế độ nối thêm.

f=open('test.txt','a')
f.write('Python Tutorials\n')

Tệp bây giờ, có trước đó cũng như chuỗi mới được thêm vào. Đối tượng tệp cũng hỗ trợwritelines() để ghi từng chuỗi trong một đối tượng danh sách vào tệp.

f=open('test.txt','a')
lines=['Java Tutorials\n', 'DBMS tutorials\n', 'Mobile development tutorials\n']
f.writelines(lines)
f.close()

Thí dụ

Các readlines()phương thức trả về một danh sách các chuỗi, mỗi chuỗi đại diện cho một dòng trong tệp. Cũng có thể đọc từng dòng một cho đến khi kết thúc tệp.

f=open('test.txt','r')
while True:
   line=f.readline()
   if line=='' : break
   print (line, end='')
f.close()

Đầu ra

Hello TutorialsPoint
Python Tutorials
Java Tutorials
DBMS tutorials
Mobile development tutorials

Chế độ nhị phân

Theo mặc định, thao tác đọc / ghi trên một đối tượng tệp được thực hiện trên dữ liệu chuỗi văn bản. Nếu chúng ta muốn xử lý các tệp thuộc các loại khác nhau như phương tiện (mp3), tệp thực thi (exe), ảnh (jpg), v.v., chúng ta cần thêm tiền tố 'b' vào chế độ đọc / ghi.

Câu lệnh sau sẽ chuyển đổi một chuỗi thành byte và ghi vào một tệp.

f=open('test.bin', 'wb')
data=b"Hello World"
f.write(data)
f.close()

Cũng có thể chuyển đổi chuỗi văn bản thành byte bằng cách sử dụng hàm encode ().

data="Hello World".encode('utf-8')

Chúng ta cần sử dụng ‘rb’chế độ đọc tệp nhị phân. Giá trị trả về của phương thức read () được giải mã đầu tiên trước khi in.

f=open('test.bin', 'rb')
data=f.read()
print (data.decode(encoding='utf-8'))

Để ghi dữ liệu số nguyên trong tệp nhị phân, đối tượng số nguyên phải được chuyển đổi thành byte bằng to_bytes() phương pháp.

n=25
n.to_bytes(8,'big')
f=open('test.bin', 'wb')
data=n.to_bytes(8,'big')
f.write(data)

Để đọc lại từ một tệp nhị phân, hãy chuyển đổi đầu ra của hàm read () thành số nguyên bằng hàm from_bytes ().

f=open('test.bin', 'rb')
data=f.read()
n=int.from_bytes(data, 'big')
print (n)

Đối với dữ liệu dấu phẩy động, chúng ta cần sử dụng struct mô-đun từ thư viện chuẩn của Python.

import struct
x=23.50
data=struct.pack('f',x)
f=open('test.bin', 'wb')
f.write(data)

Giải nén chuỗi khỏi hàm read (), để truy xuất dữ liệu float từ tệp nhị phân.

f=open('test.bin', 'rb')
data=f.read()
x=struct.unpack('f', data)
print (x)

Đọc / ghi đồng thời

Khi một tệp được mở để ghi (với 'w' hoặc 'a'), bạn không thể đọc từ tệp đó và ngược lại. Làm như vậy sẽ dẫn đến lỗi UnSupportedOperation. Chúng ta cần đóng tệp trước khi thực hiện thao tác khác.

Để thực hiện đồng thời cả hai thao tác, chúng ta phải thêm ký tự '+' vào tham số chế độ. Do đó, chế độ 'w +' hoặc 'r +' cho phép sử dụng phương thức write () cũng như read () mà không cần đóng tệp. Đối tượng File cũng hỗ trợ hàm seek () để tua lại luồng đến bất kỳ vị trí byte mong muốn nào.

f=open('test.txt','w+')
f.write('Hello world')
f.seek(0,0)
data=f.read()
print (data)
f.close()

Bảng sau đây tóm tắt tất cả các phương thức có sẵn cho một tệp như đối tượng.

Sr.No Phương pháp & Mô tả
1

close()

Đóng tệp. Một tệp đã đóng không thể đọc hoặc ghi được nữa.

2

flush()

Xả bộ đệm bên trong.

3

fileno()

Trả về bộ mô tả tệp số nguyên.

4

next()

Trả về dòng tiếp theo từ tệp mỗi khi nó được gọi. Sử dụng trình vòng lặp next () trong Python 3.

5

read([size])

Đọc nhiều nhất các byte kích thước từ tệp (ít hơn nếu lần đọc chạm tới EOF trước khi nhận được các byte kích thước).

6

readline([size])

Đọc toàn bộ một dòng từ tệp. Một ký tự dòng mới ở cuối được giữ trong chuỗi.

7

readlines([sizehint])

Đọc cho đến khi EOF sử dụng readline () và trả về danh sách chứa các dòng.

số 8

seek(offset[, whence])

Đặt vị trí hiện tại của tệp. 0-đầu 1-hiện tại 2-kết thúc.

9

seek(offset[, whence])

Đặt vị trí hiện tại của tệp. 0-đầu 1-hiện tại 2-kết thúc.

10

tell()

Trả về vị trí hiện tại của tệp

11

truncate([size])

Cắt bớt kích thước của tệp.

12

write(str)

Ghi một chuỗi vào tệp. Không có giá trị quay lại.