Đọc mảng 1 chiều từ File

Một phần của tài liệu [GiaoTrinh] - PythonCoBan_v4_32bit (Trang 78 - 79)

Đây là một yêu cầu thường xuyên sử dụng ở các ngơn ngữ như Pascal hay C. Để có thể đọc 1 mảng 1 chiều từ file, thường chúng ta sẽ phải quy định cấu trúc của file đó. Giả sử chúng ta sẽ quy định dòng đầu tiên của file là số phần tử trong mảng, các dòng tiếp theo là các phần tử của mảng, mỗi dòng chỉ chứa một phần tử. Nội dung của 1 file như vậy sẽ như sau:

Hình 8.2: File chứa dữ liệu của 1 mảng 1 chiều 3 phần tử

Rõ ràng, việc đọc dữ liệu từ file này và lưu vào một mảng khá đơn giản: đọc số lượng phần tử và dùng 1 vịng for để đọc tiếp. Câu lệnh chính sẽ sử dụng là read- line, như minh họa sau đây:

1 file = open(" test . txt ", " r ")

2 a = []

3 N = int(file. r e a d l i n e () )

4 for i in r a n g e(0 , N ) :

5 temp = int(file. r e a d l i n e () )

6 a . a p p e n d ( temp )

7 p r i n t( a )

8 file. c l o s e ()

Chương trình 8.4: Đọc mảng một chiều từ file

Một bài tốn phức tạp hơn, đó là trong file khơng có thơng tin về kích thước. Các phần tử của mảng cách nhau bằng khoảng trắng và viết liền nhau trên một hàng như minh họa ở Hình 8.3.

Hình 8.3: Mảng 1 chiều khơng có thơng tin về số phần tử

Với yêu cầu như trên, việc đọc dữ liệu vào với các ngơn ngữ khác có thể sẽ phức tạp. Tuy nhiên với sự hỗ trợ của Python, cơng việc này cực kì đơn giản. Chúng ta chỉ việc đọc hết dòng dữ liệu, và cắt nó ra bằng câu lệnhsplit(). Chương trình gợi

1 file = open(" test . txt ", " r ") 2 a = [] 3 data = file. r e a d l i n e () . s p l i t () 4 for i in data : 5 temp = int( i ) 6 a . a p p e n d ( temp ) 7 p r i n t( a ) 8 file. c l o s e ()

Chương trình 8.5: Đọc mảng khơng có thơng tin về số phần tử

Sau khi dùng tốn tửsplit(), bản thân biếndatađã là mảng 1 chiều. Tuy nhiên, các phần tử của nó đang là chuỗi ký tự. Vịng lặp for tiếp theo chỉ đơn giản là chuyển từ kiểu ký tự sang kiểu số nguyên, rồi nối vào mảngacủa chúng ta. Một lỗi quan trọng mà người dùng có thể gặp phải, là tự nhấn thêm ký tự Enter vào file text. Điều này làm cho việc ép kiểu sang số nguyên sẽ xảy ra lỗi.

Thơng qua ví dụ này, chúng tơi cũng muốn trình bày một cách khác để dùng vịng lặp for. Với cách dùng này, chúng takhơng quan tâm tới chỉ số của phần tử trong mảng, mà chỉ quan tâm tới việc duyệt hết mọi phần tử trong mảng mà thôi. Ở cách

dùng này, biến data được xem là một tập hợp, và i sẽ lần lượt là các giá trị trong tập hợp đó.

Một phần của tài liệu [GiaoTrinh] - PythonCoBan_v4_32bit (Trang 78 - 79)

Tải bản đầy đủ (PDF)

(138 trang)