欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python应用实例

程序员文章站 2022-07-15 08:11:42
...

该Python应用实例包含以下两种操作:

1.填充用户假数据的小工具(数据写入txt文本)。

2.txt文本写入excel文件。

3.合并上述两种操作。

接下来就详细说明实现操作。

一、填充用户假数据的小工具。

父类:FakeUser

功能:

1).随机姓名 a.单字名 b.双字名

2).随机性别

子类:SnsUser

功能:

1).随机数量的跟随者 a.few b.a lot

具体代码如下:

import  random

ln_path = './name/last_name.txt'
fn_path = './name/first_name.txt'
fn = []
ln1 = [] #单字名
ln2 = [] #双字名
with open(fn_path,'r',encoding='UTF-8') as f:
    for line in f.readlines():
        fn.append(line.split('\n')[0])
with open(ln_path,'r',encoding='UTF-8') as f:
    for line in f.readlines():
        if len(line.split('\n')[0]) == 1:
            ln1.append(line.split('\n')[0])
        else:
            ln2.append(line.split('\n')[0])
fn_t = tuple(fn)
ln1_t = tuple(ln1)
ln2_t = tuple(ln2)

class FakeUser():
    def fake_name(self, amount=1,one_word=False,two_words=False):
        n = 0
        while n <=amount:
            if one_word:
                full_name = random.choice(fn) + random.choice(ln1)
            elif two_words:
                full_name = random.choice(fn) + random.choice(ln2)
            else:
                full_name = random.choice(fn) + random.choice(ln1 + ln2)
            yield full_name
            n+=1

    def fake_gender(self,amount=1):
        n = 0
        while n <= amount:
            gender = random.choice(['男','女'])
            yield gender
            n+=1
class SnsUser(FakeUser):
    def get_followers(self,amount=1,few=True,a_lot=False):
        n = 0
        while n <= amount:
            if few:
                followers = random.randrange(1,50)
            elif a_lot:
                followers = random.randrange(200,10000)
            yield followers
            n+=1

user_a = FakeUser()
user_b = SnsUser()
name_a = open('./name/name.txt','w',encoding='UTF-8')
a_name = []
a_gender = []
l = []
for name,gender in zip(user_a.fake_name(100),user_a.fake_gender(100)):
    a_name.append(name)
    a_gender.append(gender)
for i in range(0, len(a_name)):
    l.append(a_name[i]+' '+a_gender[i]+'\n')
name_a.writelines(l)
name_a.close()

其中

姓文件下载地址:https://video.mugglecode.com/first_name.txt

名文件下载地址:https://video.mugglecode.com/last_name.txt

二、txt文本数据写入excel文件。

1).文本读取函数。

2).写入excel函数。

3)主函数。

import xlwt
from xlutils.copy import copy
import openpyxl
from openpyxl import Workbook,load_workbook
from openpyxl.styles import Font,colors        #利用这些可以自行设置字体和颜色

#文本读取函数
def readTxt(file):
    ls = list()
    with open(file, 'r', encoding='UTF-8') as f:
        for line in f.readlines():
            #异常处理机制
            try:
                index1 = line.index(' ')
                index2 = line.index('\n')
                name = line[:index1]
                sex = line[index1+1:index2]             #利用切片准确截取主体信息
                ls.append((name,sex))                   #以元组的形式追加进空列表
            except:
                print('wrong format!')
    f.close()
    return ls

#写入excel函数
def write_excel_xls(path, sheet_name, value):
    index = len(value)                                  #列表中所含元组的个数,从而确定写入Excel的行数
    wb = load_workbook(path)                            #打开Excel
    ws = wb['Sheet']                                    #选择Sheet工作表
    ws.title = sheet_name                               #修改Sheet名称为sheet_name
    sheet = wb[ws.title]                                #选定该作业表
    sheet.column_dimensions['B'].width=15               #设置格式
    for i in range(index):                              #按行加入
        sheet.append(value[i])
        print(value[i])
    wb.save(path)                                       #保存文件
    print("题目写入数据成功!")

#主函数
if __name__ == '__main__':
    book_name_xlsx = './name/name.xlsx'                 #文件路径
    wb = Workbook()
    wb.save(book_name_xlsx)
    sheet_name_xlsx = '人员工作簿'                      #excel名称
    art = readTxt('./name/name.txt')                    #调用读取函数
    art.insert(0,('姓名','性别'))                       #插入表头
    write_excel_xls(book_name_xlsx, sheet_name_xlsx,art)#调用写入函数

三、合并上述两种操作为一段完整代码。

import xlwt
from xlutils.copy import copy
import openpyxl
from openpyxl import Workbook,load_workbook
from openpyxl.styles import Font,colors        #利用这些可以自行设置字体和颜色

import  random

ln_path = './name/last_name.txt'
fn_path = './name/first_name.txt'
fn = []
ln1 = [] #单字名
ln2 = [] #双字名
with open(fn_path,'r',encoding='UTF-8') as f:
    for line in f.readlines():
        fn.append(line.split('\n')[0])
with open(ln_path,'r',encoding='UTF-8') as f:
    for line in f.readlines():
        if len(line.split('\n')[0]) == 1:
            ln1.append(line.split('\n')[0])
        else:
            ln2.append(line.split('\n')[0])
fn_t = tuple(fn)
ln1_t = tuple(ln1)
ln2_t = tuple(ln2)

class FakeUser():
    def fake_name(self, amount=1,one_word=False,two_words=False):
        n = 0
        while n <=amount:
            if one_word:
                full_name = random.choice(fn) + random.choice(ln1)
            elif two_words:
                full_name = random.choice(fn) + random.choice(ln2)
            else:
                full_name = random.choice(fn) + random.choice(ln1 + ln2)
            yield full_name
            n+=1

    def fake_gender(self,amount=1):
        n = 0
        while n <= amount:
            gender = random.choice(['男','女'])
            yield gender
            n+=1
class SnsUser(FakeUser):
    def get_followers(self,amount=1,few=True,a_lot=False):
        n = 0
        while n <= amount:
            if few:
                followers = random.randrange(1,50)
            elif a_lot:
                followers = random.randrange(200,10000)
            yield followers
            n+=1

#文本读取函数
def readTxt(file):
    ls = list()
    with open(file, 'r', encoding='UTF-8') as f:
        for line in f.readlines():
            #异常处理机制
            try:
                index1 = line.index(' ')
                index2 = line.index('\n')
                name = line[:index1]
                sex = line[index1+1:index2]             #利用切片准确截取主体信息
                ls.append((name,sex))                   #以元组的形式追加进空列表
            except:
                print('wrong format!')
    f.close()
    return ls

#写入excel函数
def write_excel_xls(path, sheet_name, value):
    index = len(value)                                  #列表中所含元组的个数,从而确定写入Excel的行数
    wb = load_workbook(path)                            #打开Excel
    ws = wb['Sheet']                                    #选择Sheet工作表
    ws.title = sheet_name                               #修改Sheet名称为sheet_name
    sheet = wb[ws.title]                                #选定该作业表
    sheet.column_dimensions['B'].width=15               #设置格式
    for i in range(index):                              #按行加入
        sheet.append(value[i])
        print(value[i])
    wb.save(path)                                       #保存文件
    print("题目写入数据成功!")

#主函数
if __name__ == '__main__':
    user_a = FakeUser()
    user_b = SnsUser()
    name_a = open('./name/name.txt', 'w', encoding='UTF-8')
    a_name = []
    a_gender = []
    l = []
    for name, gender in zip(user_a.fake_name(100), user_a.fake_gender(100)):
        a_name.append(name)
        a_gender.append(gender)
    for i in range(0, len(a_name)):
        l.append(a_name[i] + ' ' + a_gender[i] + '\n')
    name_a.writelines(l)
    name_a.close()

    book_name_xlsx = './name/name.xlsx'                 #文件路径
    wb = Workbook()
    wb.save(book_name_xlsx)
    sheet_name_xlsx = '人员工作簿'                      #excel名称
    art = readTxt('./name/name.txt')                    #调用读取函数
    art.insert(0,('姓名','性别'))                       #插入表头
    write_excel_xls(book_name_xlsx, sheet_name_xlsx,art)#调用写入函数

 

相关标签: Python