Giới thiệu¶
Cho đến nay, tất cả các dữ liệu trong các chương trình của chúng tôi đã được mã hóa cứng vào chính chương trình hoặc nếu không nó đến từ người dùng đã nhập nó vào bàn phím. Điều này khá hạn chế và khá rõ ràng rằng chúng tôi sẽ muốn các chương trình có thể đọc dữ liệu từ các tệp.
Trong bài học này, chúng ta sẽ nói về những gì chúng ta có thể làm với các tệp văn bản. Các tệp văn bản là các tệp sử dụng một trong một số sơ đồ mã hóa tiêu chuẩn trong đó tệp có thể được giải thích là ký tự có thể in. Sau đó, chúng ta có thể tìm hiểu về các tệp nhị phân nơi chúng ta không thể xem tệp là ký tự nhưng đối với hầu hết các mục đích của chúng ta, chúng ta có thể giả sử chúng ta có văn bản.
Mở một tập tin
Đầu tiên chúng tôi sẽ cần một chuỗi để chỉ định tên của tệp của chúng tôi.
Chúng tôi có thể có một biến cho điều này và có thể:
- Nói theo nghĩa đen, nếu chương trình của bạn luôn luôn sử dụng cùng tên.
- Đọc nó từ người dùng sử dụng
myfile = open['story.txt', 'r'] s = myfile.readline[] # Read a line into s. print[s] s # Notice the \n that you only see when you look # at the contents of the variable.
4 và lưu nó trong một biến
Lưu ý: Tránh sử dụng 'tệp' làm tên biến, vì nó là một loại.
Tiếp theo, chúng tôi sử dụng lệnh
myfile = open['story.txt', 'r'] s = myfile.readline[] # Read a line into s. print[s] s # Notice the \n that you only see when you look # at the contents of the variable.5 và tên của tệp
In [1]:
f = open['story.txt', 'r'] f
Out[1]:
Điều này mở tệp có tên
myfile = open['story.txt', 'r'] s = myfile.readline[] # Read a line into s. print[s] s # Notice the \n that you only see when you look # at the contents of the variable.6 từ thư mục hiện tại. Nó được mở để đọc [đó là chế độ
myfile = open['story.txt', 'r'] s = myfile.readline[] # Read a line into s. print[s] s # Notice the \n that you only see when you look # at the contents of the variable.7] và loại đối tượng là
myfile = open['story.txt', 'r'] s = myfile.readline[] # Read a line into s. print[s] s # Notice the \n that you only see when you look # at the contents of the variable.8. Đừng căng thẳng về loại này. Chỉ cần nghĩ về nó như một tập tin mở. Ý tưởng khái niệm quan trọng ở đây là đối tượng này không chỉ biết nội dung của tệp, mà còn biết vị trí hiện tại của chúng tôi trong tệp. Vì vậy, một khi chúng ta bắt đầu đọc, nó biết chúng ta đã đọc bao nhiêu và có thể tiếp tục cho chúng ta phần tiếp theo.much we've read and is able to keep giving us the next piece.
Đọc từ một tập tin
Có một số cách khác để đọc từ một tập tin.
- Đọc một dòng duy nhất
In [3]:
myfile = open['story.txt', 'r'] s = myfile.readline[] # Read a line into s. print[s] s # Notice the \n that you only see when you look # at the contents of the variable.
Out[3]:
'Mary had a little lamb\n'
Nhân vật
myfile = open['story.txt', 'r'] s = myfile.readline[] # Read a line into s. print[s] s # Notice the \n that you only see when you look # at the contents of the variable.9 [Backslash N] là một ký tự duy nhất đại diện cho một dòng mới.
In [3]:
s = myfile.readline[] # The next call continues where we left off. print[s] s = myfile.readline[] # And so on... print[s] myfile.close[]
His fleece was white as snow, and everywhere that Mary went
Tôi có thể sử dụng điều này để đọc toàn bộ tệp, từng chút một, dưới sự kiểm soát của tôi.
- Đọc một số ký tự nhất định
In [4]:
filename = 'story.txt' myfile = open[filename] s = myfile.read[10] # Read 10 characters into s. print[s] s = myfile.read[10] # Read the next 10 characters into s. print[s] myfile.close[]
Tôi cũng có thể sử dụng điều này để đọc toàn bộ tệp, từng chút một, dưới sự kiểm soát của tôi.
- Đọc một dòng tại một thời điểm từ đầu đến cuối
Nếu tôi biết tôi muốn đọc từng dòng cho đến cuối, một vòng lặp
'Mary had a little lamb\n'0 giúp điều này dễ dàng. Đây có lẽ là cách phổ biến nhất để đọc một tập tin. Sử dụng điều này trừ khi bạn có một lý do không.
In [5]:
f = open['story.txt'] for line in f: print[line] # Or do whatever you wish to line myfile.close[] # Good habit: close a file when you are done with it.
Mary had a little lamb. His fleece was white as snow, and everywhere that Mary went the lamb was sure to go.
Câu hỏi: Tại sao đầu ra từ vòng lặp cho vòng đôi? Trả lời:
'Mary had a little lamb\n'1 cung cấp cho bạn một
myfile = open['story.txt', 'r'] s = myfile.readline[] # Read a line into s. print[s] s # Notice the \n that you only see when you look # at the contents of the variable.9 và có một ở cuối mỗi dòng.
Câu hỏi: Làm thế nào bạn có thể một không gian đơn đầu ra?
Dải ký tự dòng mới từ cuối mỗi dòng trước khi bạn in.
In [7]:
f = open['story.txt'] for line in f: line = line.strip['\n'] print[line]0
[4] Đọc mọi thứ trong tệp thành một chuỗi
In [8]:
Out[9]:
3[5] Sử dụng
'Mary had a little lamb\n'3 để đọc tệp thành
'Mary had a little lamb\n'4 của các dòng.
In [10]:
4Out[10]:
5Người mới bắt đầu thường làm một trong hai cách tiếp cận cuối cùng vì chúng có vẻ dễ dàng.
- Câu hỏi: Nhược điểm của việc đọc tất cả cùng một lúc là gì?
- Trả lời: Có khả năng có rất nhiều không gian!
Đừng sử dụng kỹ thuật này trừ khi bạn thực sự cần truy cập vào toàn bộ tệp cùng một lúc.
Thông thường, chúng ta có thể đọc một mảnh, đối phó với nó và ném nó ra.
Đối phó với sự kết thúc của một tập tin
Với cách tiếp cận vòng lặp
'Mary had a little lamb\n'0, vòng lặp sẽ tự động dừng khi kết thúc tệp. Hoặc thậm chí không bao giờ lặp lại một lần nếu tệp trống!
Nhưng điều gì xảy ra nếu bạn ở cuối tệp khi bạn gọi
'Mary had a little lamb\n'6 hoặc
'Mary had a little lamb\n'7? Bạn nhận được chuỗi trống. Sau đó, bạn biết bạn có thể ngừng cố gắng đọc thêm.
You get the empty string. You then know you can stop trying to read more.
Thí dụ¶
In [11]:
6Mary had a little lamb. His fleece was white as snow, and everywhere that Mary went the lamb was sure to go.
Trong khi Loops¶
Ví dụ này giới thiệu một loại vòng lặp mới - vòng lặp
'Mary had a little lamb\n'8
Cấu trúc của một vòng lặp trong thời gian
8Những gì nó làm
Lưu ý quan trọng: Nếu điều kiện trở thành sai trong phần thân của vòng lặp, vòng lặp không dừng lại ở thời điểm đó. Lần duy nhất nó quyết định nên tiếp tục hay dừng là ở đầu vòng lặp trên mỗi lần lặp.
Một bài tập với các vòng lặp trong khi
Viết chức năng
'Mary had a little lamb\n'9 yêu cầu người dùng nhập
s = myfile.readline[] # The next call continues where we left off. print[s] s = myfile.readline[] # And so on... print[s] myfile.close[]0 hoặc
s = myfile.readline[] # The next call continues where we left off. print[s] s = myfile.readline[] # And so on... print[s] myfile.close[]1 và tiếp tục lặp lại yêu cầu nhiều lần cho đến khi người dùng nhập một trong hai tùy chọn này.
Nếu bạn hoàn thành bài tập đó, hãy thay đổi chức năng của mình để nó chấp nhận bất kỳ biến thể trường hợp nào như 'có', 'có' hoặc thậm chí 'không' và sau đó trả về phiên bản viết thường của những gì người dùng cung cấp. Nhưng nếu người dùng nói 'NOPE' hoặc 'có thể', nó sẽ không quay lại và yêu cầu lại 'có' hoặc 'không'.
In [4]:
myfile = open['story.txt', 'r'] s = myfile.readline[] # Read a line into s. print[s] s # Notice the \n that you only see when you look # at the contents of the variable.0
myfile = open['story.txt', 'r'] s = myfile.readline[] # Read a line into s. print[s] s # Notice the \n that you only see when you look # at the contents of the variable.1
Tập thể dục khi đọc một tập tin
Tệp
s = myfile.readline[] # The next call continues where we left off. print[s] s = myfile.readline[] # And so on... print[s] myfile.close[]2 chứa dữ liệu từ trạm thời tiết UTM vào tháng 1 năm 2006. Tải xuống từ trang web C4M vào máy địa phương của bạn và đưa nó vào cùng thư mục như nơi Pyzo đang lưu trữ các chương trình của bạn. Tìm ra nơi lưu trữ các tệp hoặc cách chỉ định các đường dẫn đến tệp của bạn là một nửa trận chiến!
Mở nó ở Pyzo để xem nó trông như thế nào.
Viết chương trình Python để mở tệp và chỉ đọc dòng đầu tiên
Đọc dòng thứ hai [đây vẫn là một tiêu đề]
Đọc dòng thứ ba vào một biến
s = myfile.readline[] # The next call continues where we left off. print[s] s = myfile.readline[] # And so on... print[s] myfile.close[]
3.Loại dòng là gì?
Gọi phương thức
s = myfile.readline[] # The next call continues where we left off. print[s] s = myfile.readline[] # And so on... print[s] myfile.close[]
4 trực tuyến và lưu giá trị trả về. Loại được trả lại bằng phương pháp này là gì?Tra cứu phương pháp
s = myfile.readline[] # The next call continues where we left off. print[s] s = myfile.readline[] # And so on... print[s] myfile.close[]
4 trong tài liệu Python 3.
In [13]:
myfile = open['story.txt', 'r'] s = myfile.readline[] # Read a line into s. print[s] s # Notice the \n that you only see when you look # at the contents of the variable.2
myfile = open['story.txt', 'r'] s = myfile.readline[] # Read a line into s. print[s] s # Notice the \n that you only see when you look # at the contents of the variable.3
Một số câu hỏi và bước cần làm:
- Loại kết quả là gì?
- Loại yếu tố của kết quả là gì?
Nhiệt độ là yếu tố nào?
Viết một chương trình mà:
- Mở tệp vào tháng 106.txt
- đọc trong tiêu đề và bỏ qua nó
- sử dụng một vòng lặp để đọc trong tất cả các dòng còn lại
- chỉ in ra một ngày và nhiệt độ từ mỗi dòng
Chạy chương trình của bạn và đảm bảo nó hoạt động. Khi nó hoạt động, hãy hiển thị TA hoặc người hướng dẫn
- Now change your program so that it doesn't print any temperatures but it looks at each temperature and keeps the warmest temperature it has seen so far and the corresponding day and time. When the whole file has been read, print the day and time of the coldest reading in the file. Be careful. You want to convert the values to integers before you compare them. The string '11' < '2' but 11 > 2.