python基础知识(二)—— 数据运算&循环loop&字符格式化输出&字典&String 操作&文件操作

本文介绍了Python的基础知识,包括数据运算(整型、布尔、字符串、列表、元组),循环(for、while)、字符格式化输出、字典操作、字符串方法以及文件操作的各种模式(r、w、a、r+、w+、a+)。重点讨论了如何在磁盘上修改文件,并给出了实例和最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据运算

数据类型

不可变类型:整型,字符串,元组
可变类型:列表,字典

  • 数字–>整数 int(integer)
    整型/长整型:
    在 python3中 已经不区分整型与长整型,统一都叫整型
    在C中区分,分别是: int age 22 , long age
    布尔:
    只有2种状态,分别是:真 True; 假 False。
    字符串:
    salary.isdigit()
    计算机中, 一切皆为对象。
    世界万物,皆为对象,一切对象皆可分类

列表,元组
列表创建:

a=[1,2,3]#第一种
a=list(((1,2,3),))#第二种,也可以写成a=list([[1,2,3],])

元组创建:

tup1=()#空元组
tup2=(20,)#创建一个元组,第一个元素是20(还有多个元素可在‘逗号’后面追加)
a=tuple([1,2,3])

元组切片查询

a=(1,2,3,4,5)
print(a[1:2])
#打印结果
(2,)

  • 索引(下标) ,都是从0开始
#切片
           .count 查某个元素的出现次数
           .index 根据内容找其对应的位置
           "haidilao ge" in a
  • 增加
            a.append() 追加
            a.insert(index, "内容")
            a.extend 扩展
  • 修改
            a[index] = "新的值"
            a[start:end] = [a,b,c]
  • 删除
            remove("内容")
            pop(index)
            del a, del a[index]
            a.clear() 清空
  • 排序
            sort ()
            reverse()
  • 身份判断
            >>> type(a) is list
            True
            >>>

循环loop

for
while
break , continue

for i in range(int(len(data) * rate)):
		out_file_1.write(data[i][1])

有限循环 ,次数限制
无限循环=死循环
continue 结束本次循环,继续下一次循环
break 跳出整个当前的循环

字符格式化输出

占位符

  • %s s = string
  • %d d = digit 整数
  • %f f = float 浮点数,约等于小数
#举个栗子
print ("the classifier came back with: %s,the real answer is: %s" %(classifierResult, datingLabels[i]))
print ("the total error rate is: %f" %(errorCount/float(numTestVecs)))
#  %   格式字符串
print('alex is a good teacher')
print('%s is a good teacher'%'alex')
#关键字 in
print(123 in [23,45,123])
print('e2l' in 'hello')

字典(key-value)

以key-value形式存储,通过键(key)来存取

  • 特点:无序;键唯一
  • 创建形式:(2种)
 dic1={'name':'alex','age':36,'sex':'male'}
 dic2=dict((('name','alex'),))

字典操作
修改

dic1={'name':'alex'}
dic1['name']='limei'#中括号中的键值存在,改变key的value值,否则新增一个键值对。
"""
该方法根据参数增加对象,
key的值存在,无法改变value的内容,key的内容不存在时,新增该对象。
该方法具有返回值,
key存在是返回值=之前定义好的值,key不存在时,先增加该对象并将定义的值返回给ret1
"""
ret1=dic1.setdefault('name','wangwu')

其他操作

#查  通过键去查找
dic3={'age': 18, 'name': 'alex', 'hobby': 'girl'}
print(dic3['name'])
print(list(dic3.keys()))
print(list(dic3.values()))
print(list(dic3.items()))

dic1.clear() # 清空字典
del dic1['name'] #删除字典中指定键值对
ret=dic5.pop('age')#删除字典中指定键值对,并返回该键值对的值
a = dic5.popitem() #随机删除某组键值对,并以元组方式返回值
del dic5        #删除整个字典

String 操作

a="Let's go "
print(a)
# 1   * 重复输出字符串
print('hello'*20)
#2 [] ,[:] 通过索引获取字符串中字符,这里和列表的切片操作是相同的,具体内容见列表
print('helloworld'[2:])

#3.关键字 in
print(123 in [23,45,123])
print('e2l' in 'hello')

# 4 %  格式字符串
print('alex is a good teacher')
print('%s is a good teacher'%'alex')

#5 拼接
a='123'
b='abc'
d='44'
c=a+b
print(c)
c= ''.join([a,b,d])
print(c)

String的内置方法

st='hello kitty {name} is {age}'

print(st.count('l'))       #  统计元素个数
print(st.capitalize())     #  首字母大写
print(st.center(50,'#'))   #  (常用)居中
print(st.endswith('tty3')) #  判断是否以某个内容结尾
print(st.startswith('he')) #  (常用)判断是否以某个内容开头
print(st.expandtabs(tabsize=20))
print(st.find('t'))        #  查找到第一个元素,并将索引值返回
print(st.format(name='alex',age=37))  # (常用)格式化输出的另一种方式   待定:?:{}
print(st.format_map({'name':'alex','age':22}))
print(st.index('t'))
print('asd'.isalnum())
print('12632178'.isdecimal())
print('1269999.uuuu'.isnumeric())
print('abc'.isidentifier())
print('Abc'.islower())
print('ABC'.isupper())
print('  e'.isspace())
print('My title'.istitle())
print('My tLtle'.lower())
print('My tLtle'.upper())
print('My tLtle'.swapcase())
print('My tLtle'.ljust(50,'*'))
print('My tLtle'.rjust(50,'*'))
print('\tMy tLtle\n'.strip())
print('\tMy tLtle\n'.lstrip())
print('\tMy tLtle\n'.rstrip())
print('ok')
print('My title title'.replace('itle','lesson',1))
print('My title title'.rfind('t'))
print('My title title'.split('i',1))
print('My title title'.title())

文件操作

三种基本的操作模式 r(只可读) w(只可写) a(追加)
基本流程
1 创建文件对象
2 调用文件方法进行操作
3 关闭文件

f=open('小重山2','r',encoding='utf8')
f.write()#报错
data=f.read(5)
print(data)
f.write('\nhello world \n')
f.write('alex')

#注意:if not close,数据会缓存,而不是磁盘!
time.sleep(30)
f.close()

具体操作方法

f=open('小重山','a',encoding='utf8')
print(f.read(5))
print(f.read(5))# 注意 :汉字在这里占一个单位(in Py3)

a=f.readline()
print(a)
print(f.readline())
print(f.readline())#无论是read()还是readline(),光标会发生位置变化
print(f.readlines())#['昨夜寒蛩不住鸣。\n', '惊回千里梦,已三更。\n', '起来独自绕阶行。\n', '人悄悄,帘外月胧明。\n', '白首为功名,旧山松竹老,阻归程。\n', '欲将心事付瑶琴。\n', '知音少,弦断有谁听。']
实例打印文件
data=f.readlines()#注意及时关闭文件
f.close()

number = 0
for i in data:
     number += 1
     if number == 6:
         i = ''.join([i.strip(), 'iiiii'])  # 取代万恶的+
     print(i.strip())
f.close()
对于大数据文件,要用以下方式(the best way):
number=0
for i in f:#这是for内部将f对象做成一个迭代器,用一行去一行。
     number+=1
     if number == 6:
         i = ''.join([i.strip(), 'iiiii'])  # 取代万恶的+
         print(i.strip())
     print(i.strip())

print(f.tell())#  取出光标位置
print(f.read(2))
print(f.tell())
f.seek(0)#  移动光标到指定的位置
print(f.read(4))
flush():同步吧将数据从缓存转移到磁盘上去
进度条实例
import sys,time
for i in range(30):
     sys.stdout.write("*")
     sys.stdout.flush()
     time.sleep(0.1)

print的flush

import sys,time
for i in range(30):
    print('*',end='',flush=True)
    time.sleep(0.1)
f=open('小重山','r',encoding='utf8')

truncate():截断数据(不能在r模式下)
在w模式下:先清空,再写,再截断
在a模式下:直接将指定位置后的内容截断

f.truncate(5)
f.write('hello world')
f.truncate(5)
f.close()
r+, w+, a+

r+:光标默认在0位置,最后位置开始写
w+:先清空,再写读
a+:光标默认在最后位置

f=open('小重山','r+',encoding='utf8')
print(f.tell())
print(f.readline())
f.write('岳飞')
print(f.tell())
f.seek(0)
print(f.readline())
f.close()
终极问题 如何在磁盘修改文件

常规思路,由于磁盘存储机制不能完成

number=0
for line in f:
     number+=1
     if number==3:
         f.write('alex')

#只能采取重新创建一个文件的思路
f_read=open('小重山','r',encoding='utf8')
f_write = open('小重山2','w',encoding='utf8')

number=0
for line in f_read:
     number+=1
     if number==5:
         line=''.join([line.strip(),'alex\n'])
         line='hello 岳飞\n'
     f_write.write(line)

f_read.close()
f_write.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值