Computer >> Máy Tính >  >> Lập trình >> Python

Đối tượng tệp trong Python?

Trong python, bất cứ khi nào chúng tôi thử đọc hoặc ghi tệp, chúng tôi không cần nhập bất kỳ thư viện nào vì nó được xử lý nguyên bản.

Điều đầu tiên chúng tôi sẽ làm là sử dụng hàm mở được tích hợp sẵn để lấy đối tượng tệp.

Hàm open sẽ mở một tệp và trả về một đối tượng tệp. Các đối tượng tệp chứa các phương thức và thuộc tính mà sau này có thể được sử dụng để truy xuất thông tin hoặc thao tác với tệp bạn đã mở.

Tệp là gì?

Trước khi thực hiện bất kỳ thao tác nào trên tệp, trước tiên chúng ta hãy hiểu tệp là gì? Tệp là một vị trí được đặt tên trên đĩa để lưu trữ thông tin liên quan, vì tệp có một số tên và vị trí, nó được lưu trữ trong đĩa cứng.

Trong python, thao tác tệp được thực hiện theo thứ tự sau:

  • Đang mở tệp.
  • Thao tác Đọc hoặc Viết.
  • Đang đóng tệp.

Mở tệp- Hàm Open ()

Để mở tệp cho mục đích đọc hoặc ghi, chúng ta phải sử dụng hàm open () được tích hợp sẵn.

Hàm open () sử dụng hai đối số. Đầu tiên là tên của tệp và thứ hai là chúng ta muốn mở nó vào mục đích gì. I.e. để đọc hay viết?

Cú pháp để mở một đối tượng tệp trong python là:

File_obj = open(“filename”, “mode”)

Ở đâu

  • File_obj còn được gọi là handle là biến để thêm đối tượng tệp.

  • filename:Tên của tệp.

  • chế độ:Để cho trình thông dịch biết cách tệp sẽ được sử dụng.

>>> f = open("pytube1.py") # open file in current directory
>>> f = open(r"c:\users\rajesh\Documents\readme.txt") # Open file from the given path

Đối số chế độ

Như chúng ta có thể thấy ở trên, việc cung cấp đối số thứ hai cho hàm open () là tùy chọn, đó là chế độ. Chúng tôi có thể chỉ định chế độ trong khi mở tệp .i.e. cho dù chúng ta muốn đọc ‘r’, viết ‘w’ hay nối ‘a’ vào tệp. Chúng tôi cũng có thể chỉ định xem chúng tôi muốn mở tệp ở chế độ văn bản hay chế độ nhị phân.

Chế độ mặc định là chế độ văn bản, nơi chúng tôi lấy các chuỗi khi đọc từ tệp.

Dưới đây là các chế độ khác nhau được hỗ trợ trong hàm open ():

Chế độ tệp Python

Chế độ Mô tả
‘r’ Mở tệp để đọc. (mặc định)
‘w’ Mở tệp để viết. Tạo một tệp mới nếu nó không tồn tại hoặc cắt bớt tệp nếu nó tồn tại.
‘x’ Mở một tệp để tạo độc quyền. Nếu tệp đã tồn tại, hoạt động không thành công.
‘a’ Mở để thêm vào ở cuối tệp mà không cắt bớt. Tạo một tệp mới nếu nó không tồn tại.
‘t’ Mở ở chế độ văn bản. (mặc định)
‘b’ Mở ở chế độ nhị phân.
‘+’ Mở tệp để cập nhật (đọc và ghi)
>>> f = open("pytube1.py") #equivalent to 'r' or 'rt'
>>> f = open("pytube1.py", "w")# write in text mode
>>> f = open("color3.jpg", "r+b")# read and write in binary mode

Mã hóa mặc định phụ thuộc vào nền tảng. Trong windows, nó là ‘cp1252’ nhưng là ‘utf-g’ trong linux.

Bạn nên chỉ định kiểu mã hóa:

>>> f = open("pytube1.py", mode = "r", encoding = 'utf-8')

Tạo tệp văn bản

Hãy tạo một tệp văn bản đơn giản trong python bằng bất kỳ trình chỉnh sửa văn bản nào hoặc tùy chọn của bạn, mặc dù tôi đang sử dụng python shell ☺.

>>> # Create a text file named "textfile.txt" in your current working directory
>>> f = open("textfile.txt", "w")
>>> #above will create a file named textfile.txt in your default directory
>>> f.write("Hello, Python")
13
>>> f.write("\nThis is our first line")
23
>>> f.write("\nThis is our second line")
24
>>> f.write("\nWhy writing more?, Because we can :)")
37
>>> f.close()

Chúng ta có thể thấy một tệp mới được tạo, có tên là textfile.txt trong thư mục làm việc hiện tại của chúng ta và khi mở tệp mới tạo, chúng ta thấy một cái gì đó như:

Đối tượng tệp trong Python?

Đọc tệp văn bản bằng Python

Để đọc tệp văn bản bằng python, chúng ta có thể sử dụng nhiều cách.

Trong trường hợp bạn muốn trích xuất một chuỗi chứa tất cả các ký tự trong tệp. Chúng ta có thể sử dụng phương pháp sau:

file.read()

Dưới đây là chương trình để thực hiện cú pháp trên:

>>> f = open("textfile.txt", "r")
>>> f.read()
'Hello, Python\nThis is our first line\nThis is our second line\nWhy writing more?, Because we can :)'

Trong trường hợp bạn muốn đọc một số ký tự nhất định từ một tệp, chúng tôi có thể làm điều đó rất dễ dàng.

>>> f = open("textfile.txt", "r")
>>> print(f.read(13))
Hello, Python

Tuy nhiên, nếu bạn muốn đọc từng dòng một tệp thì bạn có thể sử dụng hàm readline ().

>>> f = open("textfile.txt", "r")
>>> print(f.read(13))
Hello, Python
>>> print(f.readline())

>>> f = open("textfile.txt", "r")
>>> print(f.readline())
Hello, Python

>>> print(f.readline())
This is our first line

>>> print(f.readline())
This is our second line

>>> print(f.readline())
Why writing more?, Because we can :)

Hoặc bạn muốn trả lại mọi dòng trong tệp, được phân tách đúng cách, chúng ta có thể sử dụng hàm readlines ().

>>> f = open("textfile.txt", "r")
>>> print(f.readlines())
['Hello, Python\n', 'This is our first line\n', 'This is our second line\n', 'Why writing more?, Because we can :)']

Trên mỗi dòng được phân tách bằng dấu phẩy.

Vòng qua một đối tượng tệp

Trong trường hợp bạn muốn đọc hoặc trả lại tất cả các dòng từ tệp theo cách có cấu trúc và hiệu quả nhất, chúng ta có thể sử dụng phương pháp loop over.

>>> f = open("textfile.txt", "r")
>>> for line in f:
print(line)

Hello, Python

This is our first line

This is our second line

Why writing more?, Because we can :)

Ghi vào tệp

Việc ghi vào tệp rất đơn giản, bạn chỉ cần mở tệp và chuyển văn bản bạn muốn ghi vào tệp.

Phương pháp này chúng tôi có thể sử dụng để nối dữ liệu vào một tệp hiện có. Sử dụng ký tự EOL để bắt đầu một dòng mới sau khi bạn ghi dữ liệu vào tệp.

>>> f = open("textfile.txt", "w")
>>> f.write("There are tons to reason to 'fall in love with PYTHON'")
54
>>> f.write("\nSee, i have added one more line :).")
36
>>> f.close()
>>> f = open("textfile.txt", "r")
>>> for line in f:
print(line)

There are tons to reason to 'fall in love with PYTHON'
See, i have added one more line :).

Đóng tệp

Sau khi hoàn thành công việc trên tệp, bạn phải sử dụng lệnh f.close () để kết thúc mọi thứ. Với điều này, chúng tôi đã đóng tệp hoàn toàn, chấm dứt tất cả các tài nguyên đang được sử dụng và giải phóng chúng để hệ thống sử dụng ở nơi khác.

>>> f = open("textfile.txt", "r")
>>> f.close()
>>> f.readlines()
Traceback (most recent call last):
File "<pyshell#95>", line 1, in <module>
f.readlines()
ValueError: I/O operation on closed file.

Sau khi đóng tệp, bất kỳ nỗ lực nào để sử dụng đối tượng tệp đều sẽ xảy ra lỗi.

Với Tuyên bố

Câu lệnh with có thể được sử dụng với các đối tượng tệp. Sử dụng hai (với các đối tượng câu lệnh &tệp), chúng tôi nhận được, cú pháp và xử lý ngoại lệ rõ ràng hơn nhiều trong chương trình của chúng tôi.

Một ưu điểm khác là bất kỳ tệp nào được mở sẽ tự động bị đóng khi chúng tôi thực hiện xong các thao tác với tệp

Cú pháp

with open(“filename”) as file:

Ví dụ:

>>> with open("textfile.txt") as f:
for line in f:
   print(line)

Đầu ra

There are tons to reason to 'fall in love with PYTHON'

See, i have added one more line :).

Việc ghi vào tệp bằng câu lệnh with cũng rất dễ dàng (như bạn đã đoán bây giờ).

>>> with open("textfile.txt", "a") as f:
f.write("\nHello, Python-Here i come once again!")

38
>>> with open("textfile.txt") as f:
for line in f:
print(line)


There are tons to reason to 'fall in love with PYTHON'

See, i have added one more line :).

Hello, Python-Here i come once again!

Tách dòng trong tệp văn bản

Chúng ta có thể tách các dòng được lấy từ một tệp văn bản bằng cách sử dụng hàm split () trong python. Chúng tôi có thể tách văn bản của mình bằng bất kỳ ký tự nào bạn chọn, ký tự đó có thể là ký tự khoảng trắng hoặc dấu hai chấm hoặc ký tự nào khác.

>>> with open("textfile.txt", "r") as f:
data = f.readlines()
   for line in data:
      words = line.split()
      print(words)

Đầu ra

['There', 'are', 'tons', 'to', 'reason', 'to', "'fall", 'in', 'love', 'with', "PYTHON'"]
['See,', 'i', 'have', 'added', 'one', 'more', 'line', ':).']
['Hello,', 'Python-Here', 'i', 'come', 'once', 'again!']

And we are going to split the text using a colon instead of a space(like above), we just need to change line.split() to line.split(“:”) and our output will be something like:

["There are tons to reason to 'fall in love with PYTHON'\n"]
['See, i have added one more line ', ').\n']
['Hello, Python-Here i come once again!']