Lessons IX : Thao tác Vào và Ra

VI. Thao tác vào và ra:

1.Input

Python có 2 hàm được thiết kế để nhận dữ liệu trực tiếp từ người sử dụng:

• input()

• raw_input()

Đó cũng là cách đơn giản để đọc một file, và đọc từ stdin nếu cần thiết

raw_input()

        raw_input() yêu cầu người sử dụng nhập vào một chuỗi dữ liệu (kết thúc bằng một dòng mới), và đơn giản trả về một chuỗi. Nó cũng có thể đưa ra một đối số để hiện thị như một lời nhắc trước khi người sử dụng vào dữ liệu. Ví dụ:

print raw_input(‘What is your name?’)

sẽ in ra:

What is your name? <người sử dụng nhập dữ liệu ở đây>

input()

input() sử dụng như raw_input để đọc một chuỗi dữ liệu và sau đó thực hiện nó nếu đó là một chương trình Python, và trả về một giá trị kết quả mà chương trình đó trả về and then returns the value that results. Ví dụ vào:

[1,2,3]

Sẽ trả về một danh sách chứa các số đó, nếu nó được đăng kí trực tiếp trong script đó.

Cũng có thể dùng nhiều biểu thức phức tạp, ví dụ, trong một script có:

x = input(‘What are the first 10 perfect squares? ‘)

Người sử dụng có thể nhập:

map(lambda x: x*x, range(10))

biểu thức nhập vào đó sẽ được thực hiện và cho ra một câu trả lời chính xác dạng danh sách. Chú ý rằng câu lệnh nhập vào đó chỉ được viết trên một dòng.

input() thường được sử dụng để nhập các chương trình nhỏ. Còn raw_input() thường dùng  trả về các chuỗi nhận được vào một kiểu dữ liệu chưa xác định, giống như:

 

x = None

while not x:

try:

x = int(raw_input())

except ValueError:

print ‘Invalid Number’

 

nếu dùng input() cần sử dụng thêm hàm eval() để xác định kiểu nhập vào.


File Input

Các đối tượng file

Python có các kiểu file được cài sẵn. Các file có thể mở bằng cách sử dụng hàm xây dựng kiểu file:

 

f = file(‘test.txt’, ‘r’)

 

Điều này có nghĩa là file f được mở để đọc. Đối số đầu tiên là tên file và đối số thứ 2 là chế độ mở file, bao gồm, ‘r’, ‘w’ hoặc ‘rw’

Cách phổ biến nhất để đọc một file là lặp lại tuần tự cho đến hết file:

 

f = open(‘test.txt’, ‘r’)

for line in f:

print line[0]

f.close()

 

Đoạn mã trên sẽ in ra kí tự đầu tiên của mỗi dòng trong file.

Cũng có thể đọc với số lượng giới hạn các kí tự tại một thời điểm, giống như sau:

 

c = f.read(1)

while len(c) > 0:

if len(c.strip()) > 0: print c,

c = f.read(1)

 

Đoạn mã này sẽ lặp lại việc đọc một số kí tự từ file f, và in ra chúng nếu chúng không phải là kí tự khoảng trắng

Một đối tượng file hoàn toàn chứa một dấu hiệu để mô tả vị trí hiện thời của con trỏ file.

Con trỏ file sẽ di chuyển từ đầu file, có thể dùng phương thức seek để dịch chuyển con trỏ file, ví dụ:

 

f.seek(0)

 

Các đối tượng file chuẩn:

Cũng giống như trong nhiều ngôn ngữ khác, các đối tượng file chuẩn được xây dựng sẵn để miêu tả vào, ra chuẩn và thông báo lỗi. Chúng nằm trong module sys và được gọi là stdin, stdout và stderr. Cũng có những bản sao của chúng trong __stdin__, __stdout__, và  __stderr__. Được dành cho IDLE và các công cụ khác khi các file chuẩn đã thay đổi

 

Để sửdụng các stdin, stdout, stderr điều khiển vào ra cần file import module sys

Ví dụ đoạn mã sau sử dụng trong Python giống như lệnh cat trong UNIX

 

import sys

for line in sys.stdin:

print line,

 

Một đối tượng cũng quan trọng là mảng sys.argv. Đây là một mảng mà chứa các đối số dòng lệnh đến chương trình

 

        python program.py hello there programmer!

Mảng này cũng có chỉ số và các đối số được định giá trị. Trong ví dụ trên, sys.argv[2] sẽ chứa xâu “there”, bởi vì tên của chương trình (“program.py”) được lưu trong argv[0]. Việc xử lý các đối số dòng lệnh có nhiều phức tạp hơn.

 

2. Output

 

Python sử dụng cách thức cơ bản nhất để xuất dữ liệu là dùng câu lệnh print.

 

print ‘Hello, world’

 

Để in ra nhiều thứ trên cùng một dòng, ta sử dụng dấu phẩy giữa chúng, ví dụ:

 

print ‘Hello,’, ‘World’

 

sẽ in ra như sau:

 

Hello, World

 

Chú ý rằng mặc dù xâu không chứa khoảng trống, nó cũng được thêm vào bởi lệnh print bởi vì dấu , giữa 2 đối tượng. Các kiểu dữ liệu tùy ý có thể được in theo cách này:

 

print 1,2,0xff,0777,(10+5j),-0.999,map,sys

 

sẽ in ra :

 

1 2 255 511 (10+5j) -0.999 <built-in function map> <module ‘sys’ (built-in)>

 

Các đối tượng có thể in trên cùng một dòng không cần viết trên một dòng mà chỉ cần đặt một dấu , ở cuối của lệnh print

 

for i in range(10):

print i,

 

sẽ in ra:

0 1 2 3 4 5 6 7 8 9

 

Để kết thúc một dòng, cần thêm vào một lệnh print mà không có đối tượng nào, ví dụ:

 

for i in range(10):

print i,

print

for i in range(10,20):

print i,

 

sẽ in ra:

 

0 1 2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19

 

Nếu không có câu lệnh print trống thì nó sẽ in ra trên cùng một dòng

 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

 

Nếu không muốn in một dòng mới hoặc một khoảng trống ( khi sử dụng dấu , ở cuối), ta có thể làm một điều khiển ngắn với sys.stdout.write  và sử dụng để xuất ra:

 

import sys

write = sys.stdout.write

write(’20’)

write(’05\n’)

 

sẽ in ra:

2005

Những cú pháp như trên có thể sử dụng khi viết vào file thay vì đến thiết bị ra chuẩn, ví dụ:

 

print >> f, ‘Hello, world’

 

Cái này sẽ được in trong bất kì đối tượng nào mà thi hành hàm write() trong đó có đối tượng file.

 

  1. Leave a comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: