编程语言
首页 > 编程语言> > python编程技术课程记录笔记

python编程技术课程记录笔记

作者:互联网

目录:

一、变量

二、字符串

三、列表和元组

四、布尔值

五、条件语句if

六、函数

七、对象的方法

八、格式化字符串

九、循环

十、文件的读写

十一、字典和json

十二、编程的思路

十三、模块与包

十四、yaml文件操作

十五、pycharm的使用技巧

十六、request与爬虫

十七、面向对象基础

十八、反射与单例模式

 

 

一、变量

# 变量与对象,一切皆为对象,可变的量都是变量
print(type('123fff'))  # str
print(2 / 3)  # 0.6666666666666666
print(2 ** 100)  # 2的100次方
# 字符串
print("""hello""")  # hello
print('''hello''')  # hello
print('hello')  # hello
print("hello")  # hello

welcome = '欢迎来学习自动化'  # python定义变量要给初始值
a = '小刘'
print(a, ',', welcome)
# 数字不能开头,用字母开头
b = 1
b = b + 1
b += 1  # 等于b=b+1
b -= 1  # 等于b=b-1
b *= 1  # 等于b=b*1
b /= 1  # 等于b=b/1

二、字符串

# 字符串,单引号和双引号都可表示字符串
url = 'https://www.baidu.com'
url2 = "https://www.baidu.com"
print(url, ',', url2)

# 当句子中有单引号,外面就用双引号引起来;当句子中有双引号,外面就用单引号引起来;当句子中有单、双引号,外面就用三引号引起来
str1 = "It's OK"
print(str1)
# 三引号也可以表示换行
str2 = ''' 飞流直下三千尺,
 疑是银河落九天'''
print(str2)
# 转义符 \n换行符;\t制表符
filepath = 'D:\soft\note.txt'  # \n表示换行了
print(filepath)
''' D:\soft
ote.txt '''
# 解决1:
filepath = 'D:\\soft\\note.txt'  # 用双\\,表示后面的\是普通字符
print(filepath)
# 解决2:在字符串前加上r,表示后面的字符串中,所有的转义符均无效
filepath = r'D:\soft\note.txt'
print(filepath)
# 解决3:表示路径时,用/代替\。(对于电脑来说,路径用\ 、 /都可以)
filepath = 'D:/soft/note.txt'
print(filepath)

# 字符串的拼接
print(1 + 1)  # 2
# print(1 + '1')  # int和str会报错
print('1' + '2')  # 11,字符串拼接
print('1' * 6)  # 结果是111111,表示将字符串1打印6次

a = 9
b = '6'
print(9 + int(b))  # 使用int()函数,将字符串转化为数字,得到15
print(str(9) + b)  # 使用str()函数,将int类型转化为字符串,进行拼接,得到96

# 字符串的下标
str3 = 'adhjhhfuerhfkjfkjfer'
print(str3[1])  # d ,下标从左边0开始
print(str3[-3])  # f ,下标右边从-1开始
# str3[1] = 'a'  # 会报错,'str' object does not support item assignment。因为str类型是不可变的对象,不能只修改一个值

# 字符串的切片 [起始值:终止值:步长]:包含起始值,不包含终止值,所以终止值要+1。步长默认为1,代表每次走一步
id_card = '320150199802254422'  # 18位身份证
# 取出生日期19980225
birthday = id_card[6:14]  # 从第6位到14位,正下标
print(birthday)
birthday1 = id_card[-12:-4]  # 从第6位到14位,负下标
print(birthday1)
# 如果要取到最后一位 id_card[-12:]
# 步长为2,得到19980225里面的1,3,5,7位1902
birthday2 = id_card[-12:-4:2]  # 从第6位到14位,负下标,步长为2
print(birthday2)
# 步长为-1,从-12位开始向左取全部的数,3201501
birthday3 = id_card[-12::-1]  # 从第6位到14位,负下标,步长为2
print(birthday3)

三、列表和元组

# 列表 元组
# 列表类似java里面的数组,与数组不同的是可以包含各种类型的对象;列表是可变对象,可以增删改
list_a = [1, 'a', [1, 2, 3], (4, 5, 6), {"name": "zhang"}]
print(list_a)
# 增
list1 = [1, 2, 3]
list1.insert(0, 999)  # 在第0位增加一个999
print(list1)
# 拼接
list2 = [4, 5, 6]
list1.extend(list2)  # 将list1和list2拼接到一起,得到[999, 1, 2, 3, 4, 5, 6],list2没有变
print(list1)
print(list2)
# 改
list1[0] = 88  # 把list1的第0位改成88,得到[88, 1, 2, 3, 4, 5, 6]
print(list1)
# 删除
print(list1.pop())  # pop()默认删除最后一位下标,也可以指定下标进行删除,有返回值
print(list1)  # 得到[88, 1, 2, 3, 4, 5]
list1.pop(0)
print(list1)  # 把88删掉,得到[1, 2, 3, 4, 5]

list1.remove(4)  # 把4删掉,remove()是直接删除值,如果有多个4,那也只删除从左开始碰到的第1个
print(list1)  # 得到[1, 2, 3, 5]

del list1[0]  # 删除下标的元素1,也可以直接删除list1
print(list1)  # 得到[2,3,5]
# 切片---也是一个新对象
list3 = [11, 22, 33, 44, 55, 66, 77]
list3_new = list3[0:3]  # 从下标0开始切片,到第三位,也可以写成[:3],得到[11,22,33];负下标list3[-7:-4]
list3_new1 = list3[-7:-4]
print(list3_new1)

# 元组,属于不可变对象,也可以使用下标和切片,但是不能增删改
tuple_1 = (100, 200, 300, 400)
# 元组中只有一个元素时,要加一个逗号
tuple_2 = (100)
print(type(tuple_2))  # 得到int类型
tuple_3 = (100,)
print(type(tuple_3))  # 得到tuple类型
# 如果元组中有子列表,子列表里面的值可以修改,但是不能直接替换掉子列表
tuple_4 = (100, 200, 300, 400, [11, 22, 33])
tuple4_new = tuple_4[4][1]  # 取到列表的第一位22
print(tuple4_new)
tuple_4[4][2] = 99  # 修改列表的第二位33为99 ,得到(100, 200, 300, 400, [11, 22, 99])
print(tuple_4)

四、布尔值

# 布尔类型、布尔表达式、条件组合
# 布尔值:True  False (真 假 、 0 1)
# python中,=表示赋值,==表示判断恒等,!=表示判断不相等
print(1 == 2)  # 得到False
print(1 != 2)  # 得到True
print('a' == 'A')  # 得到False;字符串之间的比较用ASCII值,a=97,A=65

# in , not in
list1 = [1, 2, 3, 4, [999, 888]]
print(1 in list1)  # 得到True
print(9 not in list1)  # 得到True
print(888 in list1)  # 得到False,888属于子列表,应该写成888 in list1[-1]

# and , or  执行程序时,第一、二、三个式子只要它能判断式子是假/真,后面式子就可以不再执行,直接返回False/True
print(3 > 2 and 2 > 1 and 5 > 3)  # True,用and都为真就是真。全真为真
print(3 > 2 and 2 > 1 and 5 > 9)  # False,用and有一个假就是假。一假全假
print(3 > 2 or 0 > 1)  # True,用or的时候有一个为真就是真,全部是假的就是假。一真为真,全假为假。

# not and or 组合语句。不同情况按照优先级分析,not>and>or,相同情况按照从左到右
print(2 > 1 and 1 > 2 and not True or 3 > 2)  # 得到True。
'''
1.先分析not: not True=false,所以假
2.分析and:2>1 and 1>2,是假。
3.分析or,or前面都是假,3>2是真,所以结果是真
2 > 1 and 1 > 2 and not True or 3 > 2
真          假         假          真
'''
print(2 > 1 and 1 > 2 and (not True or 3 > 2))  # 得到False
'''
通过括号改变运算优先级,先算括号里面的,所以是not>or>and
(2 > 1 and 1 > 2 and (not True or 3 > 2))
真           假             假       真
1.括号里是真
2.and是假
得到结果就是假
'''
# 浅拷贝 深拷贝
# 赋值--对列表赋值相当于起了一个别名,2个对象指向的是同一个对象。比如小张有1个外号张总,小张改变了,那张总也对应改变
list2 = [11, 22, 33]
list2_new = list2
list2[0] = 99
print(list2, id(list2))
print(list2_new, id(list2_new))
print('---------------分界线--------')
# 浅拷贝,等价于完整切片
import copy

# 浅拷贝
list3 = [91, 95, 66, 44, [1000, 200, 300]]
list3_new = copy.copy(list3)  # 浅拷贝,生成了新的对象,子列表仍然是同一个对象
list3[0] = 100
list3[-1][0] = 000
print('------浅拷贝', list3, id(list3), id(list3[-1]))  # list3改变了,子列表一起改变
print('------浅拷贝', list3_new, id(list3_new), id(list3_new[-1]))  # list3_new没变,子列表一起改变
print('---------------分界线--------')
# 完整切片
list5 = [91, 95, 66, 44, [1000, 200, 300]]
list5_new = list5[:]
list5[0] = 100
list5[-1][0] = 123
print('------切片', list5, id(list5), id(list5[-1]))  # list5改变了,子列表一起改变
print('------切片', list5_new, id(list5_new), id(list5_new[-1]))  # list5_new没变,子列表一起改变
print('---------------分界线--------')
# 深拷贝
list4 = [91, 95, 66, 44, [1000, 200, 300]]
list4_new = copy.deepcopy(list4)  # 浅拷贝,生成了新的对象,子列表也是新的对象
list4[0] = 100
list4[-1][0] = 456
print('-----深拷贝', list4, id(list4), id(list4[-1]))  # list4改变了,子列表一起改变
print('-----深拷贝', list4_new, id(list4_new), id(list4_new[-1]))  # list4_new没变,子列表没变

五、条件判断

# 条件判断
# 分支语句:顺序结构,分支结构,循环结构
# python对于缩进有严格的要求,对于缩进的空格没有要求,一般默认缩进4格
if 10 > 9:
    print('hello')  # 如果10>9为真,执行输出hello;如果是假,就不执行
# 写一个程序,用户输入分数,如果分数大于等于60,打印合格
score = input('请输入分数:')  # input()是从键盘获取到用户输入的值,返回的值是string类型。如果用户输入的是数字,要转成int型才能做比较
# 如果用户输入的是字符串,那么用int也不能转,可以写判断语句
if not score.isdigit():  # isdigit()判断对象是否是纯数字,如果输入的不是纯数字,就打印
    print('您输入的不是数字')
else:
    score = int(score)
    if score >= 60:
        print('合格')
    else:
        print('不及格')

# 写一个程序,用户输入分数,如果分数大于等于90,打印优秀;如果大于等于80,打印良好;如果大于等于60,打印合格;小于60不合格
score1 = input('请输入分数:')  # input()是从键盘获取到用户输入的值,返回的值是string类型。如果用户输入的是数字,要转成int型才能做比较
# 如果用户输入的是字符串,那么用int也不能转,可以写判断语句
if not score1.isdigit():  # isdigit()判断对象是否是纯数字,如果输入的不是纯数字,就打印
    print('您输入的不是数字')
else:
    score1 = int(score1)
    if score1 >= 90:
        print('优秀')
    elif score1 >= 80:  # 如果不用elif,都用if,那么输入62时,会打印出优秀、良好和合格。每个if都是独立的分支语句。用elif起到分支的作用
        print('良好')
    elif score1 >= 60:
        print('合格')
    else:
        print('不合格')

# 复合条件语句
# 例:如果一个人年龄大于60岁,且是男性,我们称他为老先生
age = 62
sex = '男'
# 写法1:
if age >= 60 and sex == '男':  # 用==判断恒等
    print('他是老先生1')
# 写法2:
if age >= 60:
    if sex == '男':
        print('他是老先生2')

六、函数

# 函数的定义与调用,参数和返回值
# 函数是一段封装的代码,需要它的时候可以调用
def fun1():  # 1.def是define,定义函数的关键字 2.fun1是函数名,函数名尽量用小写
    print('这是一个函数')  # 函数主体语句,必须有;没有语句用pass占位符代替


def fun2():
    return 'hello'


# 调用函数
# 方法一,直接调用
fun1()
print(fun1())  # 先打印’这是一个函数‘,再返回None,因为函数没有返回值
fun2()  # 返回显示是空的,因为没有print打印,实际的返回值hello已经写入
print(fun2())  # 打印返回值hello


# sin(30*) = 0.5, sin(90*) = 1,sin(45*) = 2**0.5/2,括号里面的30 90 45 就是函数的参数,后面的结果就是函数的返回值
# 写一个函数,可以计算两数之和
def add_func(x, y):  # x,y是形式参数,简称形参
    return x + y


# 方法二,赋值调用
a = add_func(5, 6)  # 调用,把返回值赋给a ; 5和6是实际参数,简称实参
print(a)  # 11


# 如果调用add_func(5),少参数会报错,因为实参数量小于形参数量;多参数也会报错

def add_func1(c=100, b=90):  # a和b有默认值
    return c + b


print(add_func1(60))  # 只传一个参数,默认替代第一个参数a,b还是90,打印150
print(add_func1())  # 不传参数,使用默认值,打印190
print(add_func1(b=10))  # 只传一个参数,指定替代b,a还是100,打印110
print(add_func1(10, 20))  # 传2个参数,都替代函数里的默认值,打印30
print(add_func1(b=110, c=120))  # 传2个参数,位置可以指定,都替代函数里的默认值,打印230


# 函数中可以出现多个return,但是没必要
# 写一个函数,返回数的绝对值
def abs_value(n):
    if n >= 0:
        return n
        return '34344'  # 在第一个return执行完毕之后,程序跳出,后面的renturn不执行,称为不可达语句
    else:
        return -n


print(abs_value(-5))


# 函数能否return多个值?-------可以,以元组的形式返回
def add_func2(e=100, f=90):
    return e, f, e + f, e - f


print(add_func2())  # 得到元组(100, 90, 190, 10)


def add_func3(e=100, f=90):
    return [e, f, e + f, e - f]  # [e, f, e + f, e - f]是一个对象,是一个值,不会组合成元组


print(add_func3())  # 得到list[100, 90, 190, 10]


# 可变长度参数
# 自己写的函数叫做自定义函数,python里自带的叫做内置函数
# print(1, 2, 3, 4, 5, 6, 7)  # 不管传几个参数,都能打印处理
# *args:允许用户输入任意个参数
def fun_change(*args):
    # print(args)
    return args


print(fun_change(1, 2, 3, 4, 5, 6, 7))  # 打印出(1, 2, 3, 4, 5, 6, 7)


# 关键字参数:**kwargs:允许用户输入任意个参数,用户传的参数必须是a=b的格式,相当于键值对,返回值是字典类型
def fun_arbitrary(**kwargs):
    return kwargs


print(fun_arbitrary(name='九九', age=18))  # 得到{'name': '九九', 'age': 18}

# def print(self, *args, sep=' ', end='\n', file=None):  # known special case of print
# print()函数中的sep=' '表示每个参数的间隔符,默认用空格分割,end='\n'表示打印完就换行
print(1, 2, 3, 4, 5, 6, 7, sep='=')  # 得到1=2=3=4=5=6=7
print(1, end='')
print(2, end='')  # 把换行符去掉,打印完不换行,得到12

七、对象的方法

# 对象的方法,其实就是函数,只不过是写在类里面的
str1 = 'abchdjdj'  # str1是一个字符串,可以直接使用类str中的函数
str1.isdigit()
str1.format()
# def index(self, sub, start=None, end=None):返回值是数字
a = str1.index('d')  # 返回某个或某些字符串中的位置,默认从头查找,也可以指定起始位置进行查找
print(a)
print(str1.index('d', 5))  # 从第五位开始查找
# index()方法,找不到键值会报异常:
# print(str1.index('c', 4))  # 报错,substring not found
# find()方法找不到键值会返回-1

# strip()  :默认是去掉字符串前后的空格,也可以指定去掉字符,但是只能去掉字符串外面的字符
print(str1.find('c', 4))
str2 = '            whdwehfkwef'
str2_new = '*********fjdk***fhkjd********'
print(str2.strip())  # whdwehfkwef
print(str2_new.strip('*'))  # fjdk***fhkjd,字符串里面的*不会被去掉

# relace(oldstr,newstr)  :oldstr是需要替换的字符,newstr是替换后的字符,返回值是str型,可以一直替换
print(str1.replace('d', 'k').replace('abc', 'KKK'))  # 把所有的d替换成k后,再把abc替换成KKK
# 如果没有找到要替换的字符,就保持原样不进行替换

# startswith() :判断字符串是否以某个或某些字符开头,返回值是true或false
# 根据身份证号判断是否是南京的身份证
id_card = '320104199905024422'
if id_card.startswith('3201'):
    print('南京的身份证')

# endswith() :判断字符串是否以某个或某些字符结尾,返回值是true或false
# 根据身份证号最后一位是否是X
if id_card.endswith('X'):
    print('最后一位是X')

# split() 切割字符串,它有一个参数,以参数作为切割符,将字符分隔成多个值,返回值是列表
str4 = '你好,中国'
print(str4.split('中'))  # ['你好,', '国'],中字消失
# 如果切割符位于首位或结尾,会产生空值
print(str4.split('国'))  # ['你好,中', '']
# 如果没有找到切割符,会把原来的字符串转成列表
print(str4.split('1'))  # ['你好,中国']

八、格式化字符串

# 格式化字符串
# 输出10+5=15
a = 10
b = 5
print(str(a) + '+' + str(b) + '=' + str(a + b))  # 字符串拼接方式实现
print('%d+%d=%d' % (a, b, a + b))  # 格式化字符串实现

# 方案一
# %s:字符串  %d:整数  %f:浮点数
info1 = '我是%s,你是%s,他是%s,今年是%d年' % ('刘德华', '古天乐', '刘青云', 2022)
print(info1)

# 前面的空位比后面的值多,会报错not enough arguments for format string
# info2 = '我是%s,你是%s,他是%s,今年是%d年' % ('刘德华', '古天乐', 2022)

# 前面的空位比后面的值少,报错:not all arguments converted during string formatting
# info3 = '你是%s,他是%s,今年是%s年' % ('刘德华', '古天乐', '刘青云', 2022)

# 前面用%d,后面用字符串,会报错 :%d format: a number is required, not str
# info4 = '我%d岁' % ('刘德华')

# 前面用%s,后面用数字,不会报错
info4 = '我叫%s' % 100

# 自动补齐%n,n是任意正整数,不足n位,用空格补齐到n位;默认右对齐;超过n位则全部显示
# %5n代表这个字符串有5位,格式化提供的只有3位,所以会补齐2个字符的空格
# 得到:我是刘德华上天下地霹雳无敌雷劈电视动画,你是  古天乐,他是刘青云,今年是2022年
info5 = '我是%6s,你是%5s,他是%s,今年是%s年' % ('刘德华上天下地霹雳无敌雷劈电视动画', '古天乐', '刘青云', 2022)
print(info5)
# 如果想补0,就写成%0位数d
info6 = '我的编号是%05d' % 7  # 我的编号是00007
print(info6)

# 补齐时左对齐显示,空格在后面。但是前面补的0会消失,只会在后面补空格
# 得到:我是刘德华上天下地霹雳无敌雷劈电视动画,你是古天乐  ,他是刘青云,今年是2022    年
info7 = '我是%s,你是%-5s,他是%s,今年是%-08s年' % ('刘德华上天下地霹雳无敌雷劈电视动画', '古天乐', '刘青云', 2022)
print(info7)

# %f浮点型,默认保留6位小鼠
number1 = '你输入的数字是%f' % 3.6
print(number1)  # 得到你输入的数字是3.600000

# 保留2位小数,%.小数位f
number2 = '你输入的数字是%.2f' % 3.6
print(number2)  # 得到你输入的数字是3.60,如果是最少要显示10位,可以%10.2f,得到      3.60,格式化时小数点占一位

# 方案二,参数用{}代替,不用关注类型
str1 = 'My name is {},your name is {},age is {}.'.format('clark', 'ralf', 20)
print(str1)  # My name is clark,your name is ralf,age is 20.

# 前面的空位比后面的值少,不报错,多的不显示
# 前面的空位比后面的值多,报错
# {}没有写数字时,称为顺序取值法,写了数字,称之为下标取值法,下标从0开始,{}都要写下标,2种方法不能混用,不然会报错
str2 = 'My name is {1},your name is {0},age is {2}.'.format('clark', 'ralf', 20)
print(str2)  # My name is ralf,your name is clark,age is 20.

# 补齐{:n} n是任意整数,不足n位时补齐到n位,字符是左对齐,数字是右对齐
str3 = 'My name is {:8},your name is {:9},age is {:5}.'.format('clark', 'ralf', 20)
print(str3)  # 得到My name is clark   ,your name is ralf     ,age is    20.

# 改变对齐方式:左对齐:<,居住对齐^,右对齐>。{0:>8}:第0个参数右对齐显示8位
str4 = 'My name is {:>8},your name is {:^9},age is {:<5}.'.format('clark', 'ralf', 20)
print(str4)  # 得到My name is    clark,your name is   ralf   ,age is 20   .

# 补0,字符串补0没意义
str5 = 'My name is {:>08},your name is {:^09},age is {:>05}.'.format('clark', 'ralf', 20)
print(str5)  # 得到My name is 000clark,your name is 00ralf000,age is 00020.  居中对齐就是2边都补0

# 在python3.6以后的版本,f’{}’ 用法等同于 format用法的简单使用,更加方便。:后面跟位数
name1 = 'clark'
name2 = 'Ralf'
print(f'my name is {name1:10},your name is {name2:8}.')  # my name is clark     ,your name is Ralf    .

九、循环

# 循环语句
# while循环,打印0到10的数字
i = 0
while i <= 10:  # while后面的布尔表达式为真,则一直执行循环内的语句,直到表达式的值为假,循环才结束
    print(i)
    i += 1

# for循环实现从1到10的打印,左闭右开
for a in range(1, 11):  # range(起始值,终止值,步长)  包含起始值,不包含终止值,步长默认为1
    print(a)
# 利用步长打印1-100的奇数:
for b in range(1, 100, 2):
    print(b)
# for循环的起始值,不写时默认为0;终止值必须写
for c in range(10):
    print(c)  # 打印了0-9的数
# 遍历列表
'''
list1 = ['张飞', '刘备', '关羽', '马超']
for d in range(len(list1)):
    print(list1[i])
'''
list1 = ['张飞', '刘备', '关羽', '马超']
for d in list1:
    print(d)

# break:终止循环(强制性终止)   continue:跳出当此循环
for e in range(1, 11):
    if e == 5:
        # break
        continue
    print(e)  # break打印出1-4,continue打印出1,2,3,4,6,7,8,9,10,去掉了5,因为5跳出循环
else:  # 循环语句也可以带一个else语句,当循环中没有出现break,则循环结束时,运行else部分
    print('循环执行完毕')

# 写一个倒计时程序,循环实现
import time  # 加载time模块

for i in range(10, 0, -1):  # 起始值是10,终止值是0,从大到小,步长是负的
    print(f'\r倒计时{i}秒', end='')  # \r:光标回到行首;end=‘’:不换行
    time.sleep(1)  # 让程序等待1秒
else:
    print('\r倒计时结束')

十、文件的读写

# 文件的读写,正反斜杠都能识别,防止有转义符,就用反斜杠。open()读取的是文本类的文档
filepath = 'D:/note/note1.txt'  # 文件路径
file1 = open(filepath)  # 打开一个文件,默认mode='r',读取模式,不可写入
# print(file1.read())  # 读取并打印文件的内容:1111
file1.close()  # 关闭文件,使用open()时,必须要用close(0,否则会一直占用内存

file2 = open(filepath, 'w')  # 以写入的模式打开,不可读取
file2.write('ABC')  # 文本内容被替换成ABC
file2.close()  # 关闭文件

# w+ 可以同时读写,如果文件不存在,则新建文档,写入时是清空写入
# r+ 可以同时读写,如果文件不存在,则报错,写入时是覆盖写入
# a+ 可以同时读写,如果文件不存在,则新建文档,写入时是追加写入
file3 = open('D:/note/note2.txt', 'w+')  # 以w+的模式打开,新建了一个文本
file3.write('ABC')  # 文本内容写入ABC
file3.close()  # 关闭文件

file4 = open('D:/note/note2.txt', 'r+')  # 以w+的模式打开,新建了一个文本
file4.write('9')  # 文本内容变成9BC,9覆盖了A
file4.close()  # 关闭文件

file5 = open('D:/note/note2.txt', 'a+')  # 以w+的模式打开,新建了一个文本
file5.write('888')  # 文本内容变成9BC888,888追加在后面
file5.close()  # 关闭文件

'''
模式   原始   写入  结果
r+     ABC   Q    QBC
w+     ABC   Q    Q
a+     ABC   Q    ABCQ
'''

file6 = open(filepath, 'w+')
file6.write('春风得意马蹄疾,\n一日看尽长安花。')  # 第二句换行显示
file6.seek(0)  # 要让光标回到首位,不然就默认在末尾,读取不了内容。
'''
注意:中文一般占2个字节,如果seek(2),春字不读取,如果是1,报错
seek()其实有2个参数,第二个参数默认为0,表示回到文件首位
如果第二个参数为1,表示保持光标在当前位置
如果第二个参数为2,表示光标会移到文件末尾

第二个参数为1,2时,只有wb模式可以使用
'''
print(file6.read())  # 输出
file6.close()

# 读取文件
'''
1.print(file1.read())    一次性把文本内容全读取,返回值是字符串
2.print(file1.readline())     每次读取一行的内容,返回值是字符串
3.print(file1.readlines())  读取文件所有内容,但是是用每行内容做为列表形式展示,会出现\n
   返回值是列表:['春风得意马蹄疾,\n', '一日看尽长安花。']
4.print(file1.read().splitlines())   读取文件所有内容,但是是用每行内容做为列表形式展示,没有\n
   返回值是列表:['春风得意马蹄疾,', '一日看尽长安花。']
'''

# 打开文件,用with...open打开不用关闭,可以处理多个文件
with open(filepath) as a:
    a.read()
# 新建一个文件,写入
with open('D:/note3.txt', 'w+') as file7, open(filepath) as file8:
    print(file8.read().splitlines())
    file7.write('9999')

# 性能测试,要求快速生成1000个账号,密码可以一样,账号格式:sq001,123456
with open('D:/zhanghao.txt', 'w+') as f:
    for i in range(0, 1001):
        f.write(f'sq{i:03},123456\n')  # 最少3位数字,不足3位补0

 

标签:name,python,list1,笔记,字符串,print,new,编程技术,id
来源: https://www.cnblogs.com/dydxw/p/16241560.html