Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Chỉnh sửa file trực tiếp bằng module fileinput trong Python
Khi làm việc, bạn thường phải chỉnh sửa nội dung trong các file hiện có. Ví dụ, một phần mềm được cập nhật và bạn cần thay đổi số phiên bản, hoặc bạn đổi tên các tài nguyên như file dữ liệu hay hình ảnh. Nếu chỉ là một file , bạn có thể mở và chỉnh sửa bằng trình soạn thảo yêu thích. Nhưng nếu cần xử lý nhiều file , việc viết một script Python sẽ hiệu quả hơn.

Bài viết này hướng dẫn bạn cách sử dụng module fileinput để chỉnh sửa và cập nhật trực tiếp nội dung các file .
Theo tài liệu chính thức của Python:
Module
fileinputcung cấp một lớp và các hàm hỗ trợ để dễ dàng duyệt qua dữ liệu từ đầu vào chuẩn hoặc một danh sách file . Nếu bạn chỉ cần đọc hoặc ghi một file , hãy sử dụng hàmopen().Bài viết này được đăng tại [free tuts .net]
Sử dụng đối số files trong dòng lệnh trong Python
Giả sử bạn có hai file văn bản như sau:
$ ls *.txt  
notes.txt  tools.txt  
$ cat tools.txt  
/home/learnbyexample/programs/command_help.sh  
/home/learnbyexample/bkp/calc.py  
/home/learnbyexample/programs/remove_duplicates.sh  
/home/learnbyexample/programs/calc.py  
$ cat notes.txt  
Tool: /home/learnbyexample/programs/remove_duplicates.sh  
    * retains only first copy of duplicate lines  
    * maintains input order  
Bạn vừa đổi tên thư mục từ programs thành bin. Dưới đây là cách cập nhật nội dung cả hai file bằng module fileinput. Đặt tham số inplace thành True để cho phép ghi đè nội dung file gốc.
Mã nguồn:
# change_path.py  
import fileinput  
with fileinput.input(inplace=True) as f:  
    for ip_line in f:  
        op_line = ip_line.replace('/programs/', '/bin/')  
        print(op_line, end='')  
Sau đó, chạy chương trình bằng cách chỉ định tên file trong dòng lệnh:
$ python3 change_path.py *.txt  
$ cat tools.txt  
/home/learnbyexample/bin/command_help.sh  
/home/learnbyexample/bkp/calc.py  
/home/learnbyexample/bin/remove_duplicates.sh  
/home/learnbyexample/bin/calc.py  
$ cat notes.txt  
Tool: /home/learnbyexample/bin/remove_duplicates.sh  
    * retains only first copy of duplicate lines  
    * maintains input order  
Xử lý dữ liệu từ stdin
Nếu không chỉ định file , fileinput.input() sẽ tự động lấy dữ liệu từ stdin. Nếu tham số inplace là True, stdin sẽ bị bỏ qua.
Ví dụ:
$ echo '/home/user/programs/create_venv.py' | python3 change_path.py /home/user/bin/create_venv.py
Chỉ định danh sách file trong mã nguồn
Nếu đã biết trước các file cần chỉnh sửa, bạn có thể truyền danh sách file vào tham số files.
Mã nguồn:
# file_list.py  
import fileinput  
ip_files = ('notes.txt', 'tools.txt')  
with fileinput.input(files=ip_files, inplace=True) as f:  
    for ip_line in f:  
        op_line = ip_line.replace('/programs/', '/bin/')  
        print(op_line, end='')  
Sau khi đã chỉ định danh sách file trong mã nguồn, bạn chỉ cần chạy chương trình mà không cần thêm đối số dòng lệnh:
$ python3 file_list.py
Tạo bản sao lưu trước khi chỉnh sửa trong Python
Khi chỉnh sửa file , bạn nên tạo bản sao lưu để tránh mất dữ liệu nếu có lỗi xảy ra. Tham số backup cho phép tạo bản sao của file gốc với phần mở rộng được chỉ định.
Ví dụ:
Giả sử bạn cần thay thế từ blue thành brown trong file sau:
$ cat colors.txt red blue green teal magenta dark-blue sea-green
Mã nguồn:
# inplace_with_backups.py  
import fileinput  
with fileinput.input(files='colors.txt', inplace=True, backup='.orig') as f:  
    for ip_line in f:  
        op_line = ip_line.replace('blue', 'brown')  
        print(op_line, end='')  
Khi chạy chương trình, file gốc sẽ được sao lưu với phần mở rộng .orig:
$ python3 inplace_with_backups.py # file đã chỉnh sửa $ cat colors.txt red brown green teal magenta dark-brown sea-green # Bản sao gốc $ cat colors.txt.orig red blue green teal magenta dark-blue sea-green

            Các kiểu dữ liệu trong C ( int - float - double - char ...)        
            Thuật toán tìm ước chung lớn nhất trong C/C++        
            Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)        
            ComboBox - ListBox trong lập trình C# winforms        
            Random trong Python: Tạo số random ngẫu nhiên        
            Lệnh cin và cout trong C++        
                Cách khai báo biến trong PHP, các loại biến thường gặp            
                Download và cài đặt Vertrigo Server            
                Thẻ li trong HTML            
                Thẻ article trong HTML5            
                Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên            
                Cách dùng thẻ img trong HTML và các thuộc tính của img            
                Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng