[Python Code]Python đọc ghi file text, file ini

Python đọc ghi dữ liệu file text, file ini

đọc ghi là một trong những kỹ thuật cơ bản, được sử dụng rộng rãi và phổ biến trong ngành công nghiệp phần mềm.

File text, file ini là các dạng file cơ bản được sử dụng để thiết lập các thông tin cấu hình cho một phần mềm cơ bản

1. File text cơ bản
a. Đọc các line của file text và in ra màn hình

File text có nội dung như sau.

#phattrienphanmem123az.com
def ReadFile(path):
    with open("data.txt") as F:
        data = F.read()
        line_list = data.split("\n")
    return line_list


if __name__ == "__main__":
    line_list = ReadFile("data.txt")
    for line in line_list:
        print(line + str("\n"))

 

b. Ghi dữ liệu vào file text

#phattrienphanmem123az.com
def WriteFile(file_name, data_list):
    with open(file_name, 'w') as f:
        for data in data_list:
            f.write(data)
            f.write("\n")


def main():
    list_data = ["lion", "tiger", "monkey"]
    file_name = "data.txt"
    WriteFile(file_name, list_data)


if __name__ == "__main__":
    main()

– Nếu file data.txt chưa tồn tại, nó sẽ được tạo mới.

– Thuộc tính w sẽ cho phép ghi mới dữ liệu, nghĩa là nếu data.txt tồn tại vào có dữ liệu, thì nó sẽ bị xóa để ghi lại.

– Nếu muốn ghi đè dữ liệu vào một file đã có sẵn dữ liệu, hãy thay ‘w’ bằng ‘a’

 

2. File *.ini

a. Đọc file ini

Khi xây dựng các dự án phần mềm, các file *.ini hay *.config

thường được sử dụng để thiết lập các thuộc tính ban đầu cho một phần mềm.

Cấu trúc của một file *.ini như sau.

[Setting Screen]
width = 800
height = 600
color = 0,0,0
grid = 1
[Setting 2D]
lwidth = 2
ltype = 0
color = 255,255,255

Bài toán đặt ra là, chúng ta phải đọc được dữ liệu từ file, và lưu trữ vào các đối tượng dữ liệu được mô hình hóa.

Python sẽ xử lý như sau.

#phattrienphanmem123az.com

class Color:
    iRed = 0
    iGreen = 0
    iBlue = 0


class SettingScreen:
    sWidth = 0
    sHeight = 0
    sGrid = 0
    sColor = Color()


class Setting2D:
    lWidth = 0
    lType = 0
    lColor = Color()


class SystemSetting:
    objScreen = SettingScreen()
    obj2D = Setting2D()


def ReadFileIni(path):
    sysSetting = SystemSetting()

    f = open("setting.ini", "r")
    data = f.read()
    line_list = data.split("\n")
    sLable = ""
    for line in line_list:
        words = line.split("=")
        if len(words) == 1:
            sLable = words[0]
            continue
        elif len(words) == 2:
            sKey = words[0].replace(" ", '')
            sData = words[1].replace(" ", '')
            if sLable == "[Setting Screen]":
                if sKey == "width":
                    sysSetting.objScreen.sWidth = words[1]
                if sKey == "height":
                    sysSetting.objScreen.sHeight = words[1]
                if sKey == "grid":
                    sysSetting.objScreen.sGrid = words[1]
                if sKey == "color":
                    iColor = words[1].split(',')
                    if len(iColor) == 3:
                        sysSetting.objScreen.sColor.iRed = iColor[0]
                        sysSetting.objScreen.sColor.iGreen = iColor[1]
                        sysSetting.objScreen.sColor.iBlue = iColor[2]
            if sLable == "[Setting 2D]":
                if sKey == "lwidth":
                    sysSetting.obj2D.lWidth = words[1]
                if sKey == "ltype":
                    sysSetting.obj2D.lType = words[1]
                if sKey == "color":
                    iColor = words[1].split(',')
                    if len(iColor) == 3:
                        sysSetting.obj2D.lColor.iRed = iColor[0]
                        sysSetting.obj2D.lColor.iGreen = iColor[1]
                        sysSetting.obj2D.lColor.iBlue = iColor[2]

    return sysSetting


def main():
    sysSetting = ReadFileIni("setting.ini")
    return 0


if __name__ == "__main__":
    main()

b. Ghi dữ liệu vào file *ini

để ghi dữ liệu vào file với nội dung như dữ liệu đã được đọc ra từ file ở trên, code sẽ như sau

#phattrienphanmem123az.com

class Color:
    iRed = 0
    iGreen = 0
    iBlue = 0


class SettingScreen:
    sWidth = 0
    sHeight = 0
    sGrid = 0
    sColor = Color()


class Setting2D:
    lWidth = 0
    lType = 0
    lColor = Color()


class SystemSetting:
    objScreen = SettingScreen()
    obj2D = Setting2D()


def WriteFileIni(path, data_list):
    f = open(path, "w")
    for data in data_list:
        f.write(data)
        f.write("\n")


def main():
    # Init data
    sysSetting = SystemSetting()
    sysSetting.objScreen.sWidth = 800
    sysSetting.objScreen.sHeight = 600
    sysSetting.objScreen.sColor.iRed = 0
    sysSetting.objScreen.sColor.iGreen = 0
    sysSetting.objScreen.sColor.iBlue = 0
    sysSetting.objScreen.sGrid = 1

    sysSetting.obj2D.lType = 2
    sysSetting.obj2D.lWidth = 0
    sysSetting.obj2D.lColor.iRed = 255
    sysSetting.obj2D.lColor.iGreen = 255
    sysSetting.obj2D.lColor.iBlue = 255

    # make string data
    sKeyScreen = "[Setting Screen]"
    sWidth = "width = " + str(sysSetting.objScreen.sWidth)
    sHeight = "height = " + str(sysSetting.objScreen.sHeight)
    sColor = "color = " + str(sysSetting.objScreen.sColor.iRed)
    sColor += ","
    sColor += str(sysSetting.objScreen.sColor.iGreen)
    sColor += ","
    sColor += str(sysSetting.objScreen.sColor.iBlue)
    sGrid = "grid = " + str(sysSetting.objScreen.sGrid)

    sKey2D = "[Setting 2D]"
    sLWidth = "lwidth = " + str(sysSetting.obj2D.lType)
    sLType = "ltype = " + str(sysSetting.obj2D.lType)
    sLColor = "color = " + str(sysSetting.obj2D.lColor.iRed)
    sLColor += ","
    sLColor += str(sysSetting.obj2D.lColor.iGreen)
    sLColor += ","
    sLColor += str(sysSetting.obj2D.lColor.iBlue)

    # make list
    data_list = list()
    data_list.append(sKeyScreen)
    data_list.append(sWidth)
    data_list.append(sHeight)
    data_list.append(sColor)
    data_list.append(sGrid)
    data_list.append(sKey2D)
    data_list.append(sLWidth)
    data_list.append(sLType)
    data_list.append(sLColor)

    # call to write file
    WriteFileIni("setting2.ini", data_list)
    return 0


if __name__ == "__main__":
    main()

– dữ liệu sẽ được ghi mới mỗi lần thực hiện gọi hàm WriteFileIni.

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.