python文本处理-基础篇

字符串拼接

python 复制代码
age = '18'
name = 'wzy'
print(age+name)

结果:
18wzy

切片

切片介绍

python 复制代码
sequence[start:stop:step]
  • sequence是要切片的序列(在这种情况下是name2)。
  • start是子序列开始的索引(包含)。如果省略,则默认为序列的开始。
  • stop是子序列结束的索引(不包含)。如果省略,则默认为序列的结束。
  • step是子序列中元素之间的间隔。如果省略,则默认为1。
  • [:X] ,从最左边往右数,直到X;[X:] 从X往右数直到数,直到最右边
python 复制代码
str1 = '012345'
print(str1[0:5:2])

# 结果为:
024

保留指定的小数

python 复制代码
# 方式1
print(f'下载速度 {download / 1024 :.2f} MB/S')

# 方式2
download = round(random.randint(1024, 4097) / 1024, 2)

反向步进(反向切片)

python 复制代码
str1 = '012345'
print(str1[5:0:-2])


结果:
531
print(str1[::-1])
结果倒了
python 复制代码
str1 = '12345'
print(str1[0])
print(str1[1])
print(str1[2])
print(str1[3])
print(str1[4])

#结果:
1
2
3
4
5

可以简化为:
name = 'wzy'
for i in range(3):
    print(name[i])

若要同时打印下标,可以使用一个函数:

python 复制代码
name = 'wzy'
for index, i in enumerate(name):
    print(index, i)

    
# 实现没有0的选择菜单
name = 'wzy'
for index, i in enumerate(name):
    print(index+1, i)
    
结果:
1 w
2 z
3 y

shell版切割:

bash 复制代码
name="abcde"
for i in `seq $(echo $name | wc -L)`
do
  echo $name | cut -c$i
done

同shell的字符截取范围类似,python也有类似的截取:

python 复制代码
str = 'abcde'
print(str[0:2])
print(str[1:3])
print(str[0:6])

结果:
ab
bc
abcde

替换

python 复制代码
name = 'wzy'
print(name.replace('z', 'Z', 1))  # 替换第一个 'z' 为 'Z'

结果:
Zzy

字符处理总结

python 复制代码
abc="hello,nice to meet you"
print(len(abc))                    # 调用len()函数来算长度
print(abc.__len__())               # 使用字符串的__len__()方法来算字符串的长度
print(abc.capitalize())            # 整个字符串的首字母大写
print(abc.title())                 # 每个单词的首字母大写
print(abc.upper())                 # 全大写
print(abc.lower())                 # 全小写
print("HAHAhehe".swapcase())       # 字符串里大小写互换

print(abc.center(50,"*"))          # 一共50个字符,字符串放中间,不够的两边补*
print(abc.ljust(50,"*"))           # 一共50个字符,字符串放中间,不够的右边补*
print(abc.rjust(50,"*"))           # 一共50个字符,字符串放中间,不够的左边补*

print(" haha\n".strip())           # 删除字符串左边和右边的空格或换行
print(" haha\n".lstrip())          # 删除字符串左边的空格或换行
print(" haha\n".rstrip())          # 删除字符串右边的空格或换行
print(abc.endswith("you"))         # 判断字符串是否以you结尾
print(abc.startswith("hello"))     # 判断字符串是否以hello开始
print(abc.count("e"))              # 统计字符串里e出现了多少次
print(abc.find("nice"))            # 找出nice在字符串的第1个下标,找不到会返回-1
print(abc.rfind("e"))              # 找出最后一个e字符在字符串的下标,找不到会返回-1
print(abc.index("nice"))           # 与find类似,区别是找不到会有异常(报错)
print(abc.rindex("e"))             # 与rfind类似,区别是找不到会有异常(报错)

print(abc.isalnum())               # 检查字符串是否只包含字母和数字
print(abc.isalpha())               # 检查字符串是否只包含字母
print(abc.isdecimal())             # 检查字符串是否只包含十进制数字
print(abc.isdigit())               # 判断字符是否为纯数字
print(abc.islower())               # 检查字符串中的所有字母是否都是小写
print(abc.isnumeric())             # 检查字符串是否只包含数字字符。包括数字、罗马数字、汉字数字
print(abc.isspace())               # 查字符串是否只包含空白字符;如空格、制表符、换行符等

split 分割

字符串切割 split ,split()[1]表示以空格分隔,取出第1列(前面还有一个0列)

MemTotal:        4026160 kB
MemFree:         2861068 kB
MemAvailable:    3330780 kB
Buffers:           89864 kB
python 复制代码
f = open(r"D:\Desktop\python\mem.txt", mode='r', encoding='utf-8')
for line in f:
    if line.startswith('MemAvail'):
         print(round(int(line.split()[1]) / 1024 / 1024, 2))
f.close()

# 打印可用内存3GB

有一个文件密码文件内容为:wzy:123

python 复制代码
with open(r'D:\Desktop\python\user.txt', mode='rt', encoding='utf-8') as f:
    content = f.read()
    username, userpassword = content.split(':')
    print(username, userpassword)
    
结果:wzy 123

test.txt内容如下:要求:从文件中取出每一条记录放入列表中,列表的每个元素都是 {'name':'wzy','sex':'male','age':18,'salary':3000} 的字典形式

python 复制代码
wzy male 18 3000
she male 38 30000
tom female 28 20000
jim female 28 10000

方式1:

python 复制代码
with open(r'test.txt', encoding='utf-8', mode='r') as file:
    # 初始化一个空列表存储所有字典
    records = []
    lines = file.readlines()
    for line in lines:
        # 去除首尾的空白字符并按照空格分列
        parts = line.strip().split()
        record = {
            'name': parts[0],
            'sex': parts[1],
            'age': parts[2],
            'salary': parts[3]
        }
        # 把处理好的记录添加到列表中
        records.append(record)

print(records)

执行结果:

python 复制代码
[{'name': 'wzy', 'sex': 'male', 'age': '18', 'salary': '3000'}, {'name': 'she', 'sex': 'male', 'age': '38', 'salary': '30000'}, {'name': 'tom', 'sex': 'female', 'age': '28', 'salary': '20000'}, {'name': 'jim', 'sex': 'female', 'age': '28', 'salary': '10000'}]

方式2:

split 分割后的数据会作为列表返回

python 复制代码
with open('test.txt', 'r') as file:
    # 定义标题行,顺序为:姓名, 性别, 年纪, 薪资
    headers = ['name', 'sex', 'age', 'salary']
    result = []
    for line in file:
        data = line.strip().split()
        # zip把2个列表合成为一个元组,然后dict把元组转为字典,存储到record
        record = dict(zip(headers, data))
        result.append(record)

print(result)

需求1:求薪资综合

python 复制代码
total_salary = 0
for i in result:
    total_salary += int(i['salary'])
print(total_salary)
python 复制代码
表达式方式为:
total_salary = sum(int(i['salary']) for i in result)

需求1:求平均薪资

python 复制代码
average_salary = total_salary / len(result)
相关推荐
Lanwarf-前端开发几秒前
gis风场加载
开发语言·前端·javascript
吃蛋糕的居居6 分钟前
疯狂前端面试题(四)
前端·javascript·chrome·ajax·正则表达式·firefox·html5
程序员林北北8 分钟前
【Golang学习之旅】gRPC 与 REST API 的对比及应用
java·开发语言·后端·学习·云原生·golang
钢铁男儿18 分钟前
Python 字典(一个简单的字典)
开发语言·python
游王子28 分钟前
Python Pandas(7):Pandas 数据清洗
开发语言·python·pandas
0wioiw01 小时前
Python基础(SQLAlchemy)
java·开发语言·数据库
Jackson@ML1 小时前
Django开发入门 – 2.Django的Web应用项目架构
python·django·virtualenv
dkgee1 小时前
conda将python低版本环境升级到高版本
开发语言·python·conda
风雨飘逸1 小时前
【shell&bash进阶系列】(四)SHELL脚本--变量(基础)
linux·运维·服务器·开发语言·经验分享·bash
Xiezequan1 小时前
QT修仙之路2-2 对话框 尚欠火候
开发语言·qt