Python基础知识

Python编程基础练习

本人学习过C语言,正在学习Python机器学习算法,所以从第三章开始学习,完整内容请按照原书进行:Python编程从入门到实践(从第三章起)

第三章:列表简介

bicycle=['trek','cannondale','redline','specialized']
print('bicycle=',bicycle)              #
bicycle= ['trek', 'cannondale', 'redline', 'specialized']
bicycle=['trek','cannondale','redline','specialized']
print('bicycle=',bicycle[0].title())
bicycle= Trek
bicycle=['trek','cannondale','redline','specialized']
print('bicycle=',bicycle[-1].title()) #负数是从最右侧开始的,-1表示从最右侧开往左数一列
bicycle= Specialized
bicycle=['trek','cannondale','redline','specialized']
bicycle[1]='adc'
print('bicycle=',bicycle[1].title())
bicycle= Adc
bicycle=['trek','cannondale','redline','specialized']
bicycle.append('adc')     #append只在最后一行插入
bicycle.insert(0,'apc')   #insert使用参数在任意位置插入
print('bicycle=',bicycle)
bicycle= ['apc', 'trek', 'cannondale', 'redline', 'specialized', 'adc']
bicycle=['trek','cannondale','redline','specialized']
a=bicycle.append('adc')     #append只在最后一行插入
b=bicycle.insert(0,'apc')   #insert使用参数在任意位置插入
print('bicycle=',bicycle)
print('a=',a)                     #append、insert只是操作,不会传出值
print('b=',b)
bicycle= ['apc', 'trek', 'cannondale', 'redline', 'specialized', 'adc']
a= None
b= None
bicycle=['trek','cannondale','redline','specialized']
del bicycle[0]
print('bicycle=',bicycle)
bicycle= ['cannondale', 'redline', 'specialized']
bicycle=['trek','cannondale','redline','specialized']
print('bicycle=',bicycle)
a=bicycle.pop()
print('bicycle=',bicycle)
print('a=',a)

b=bicycle.pop(0)   #pop括号里面什么都没有,删除最后一位,有参数,删除参数位,pop可以传出来值
print('bicycle=',bicycle)
print('b=',b)


bicycle= ['trek', 'cannondale', 'redline', 'specialized']
bicycle= ['trek', 'cannondale', 'redline']
a= specialized
bicycle= ['cannondale', 'redline']
b= trek
bicycle=['trek','cannondale','redline','specialized']
a='trek'
bicycle.remove(a)
print('bicycle=',bicycle)
bicycle= ['cannondale', 'redline', 'specialized']
bicycle=['trek','cannondale','redline','specialized']
bicycle.sort()
print('bicycle=',bicycle)
bicycle= ['cannondale', 'redline', 'specialized', 'trek']
bicycle=['trek','cannondale','redline','specialized']
bicycle.sort(reverse=True)        #参数True表示字母倒叙排列,False表示字母正序排列
print('bicycle=',bicycle)
bicycle= ['trek', 'specialized', 'redline', 'cannondale']
bicycle=['trek','cannondale','redline','specialized']
a=sorted(bicycle,reverse=False)        #参数True表示字母倒叙排列,False表示字母正序排列;sorted临时排序,没有改变数据原来的顺序
print('a=',a)
print('bicycle=',bicycle)
a= ['cannondale', 'redline', 'specialized', 'trek']
bicycle= ['trek', 'cannondale', 'redline', 'specialized']
bicycle=['trek','cannondale','redline','specialized']
bicycle.reverse()                      #倒序打印
print('bicycle=',bicycle)
bicycle= ['specialized', 'redline', 'cannondale', 'trek']
bicycle=['trek','cannondale','redline','specialized']
a=len(bicycle)                       #计算数据的长度
print('a=',a)
a= 4

第四章:操作列表

magicians=['alice','david','carolina']
for magicians in magicians:
    print(magicians)
alice
david
carolina
magicians=['alice','david','carolina']
for z in magicians:                    #循环三次,z的值因为for遍历了整个列表
    print(magicians)
['alice', 'david', 'carolina']
['alice', 'david', 'carolina']
['alice', 'david', 'carolina']
magicians=['alice','david','carolina']
for z in magicians: #for是遍历整个列表,对于列表,只要使用for都是全部遍历
    print(z)
alice
david
carolina
magicians=['alice','david','carolina']
for magicians in magicians:
    print(magicians)
print('hello')               #看准缩放,在for循环里,按照循环走,不在循环里(冒号包括的内容之外),不走循环
alice
david
carolina
hello

书中有这样一句段话:Python根据缩放来判断代码行与前一个代码行的关系。Python通过缩放让代码更易懂,简单地说,Python要求使用者使用缩进让代码更加整洁而结构清晰。

for value in range(1,5):  #range()函数,括号里面的第一个参数是起始(包含),第二个参数是终止位(不包含),中间都是整数
    print(value)
for a in range(2,6):  #range()函数,括号里面的第一个参数是起始(包含),第二个参数是终止( 不包含),中间都是整数
    print(a)
1
2
3
4
2
3
4
5
a=list(range(2,11,2))  #第三个参数是步长
a=[]
for b in range(1,11):
    c=b**2
    a.append(c)
print(a)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
a=[1,2,3,4,5,6,7,8,9,0]
b=min(a)
c=max(a)
d=sum(a)
print(a,b,c,d)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0] 0 9 45
a=[b**2 for b in range(1,11)]     #列表解析
print(a)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
player=['charles','martina','michael','florence','eli']
print(player[0:3])          #[]左边参数不包括,右侧包括
print(player[1:3])          #[]左边参数不包括,右侧包括
print(player[:3])           #左边所有的元素直到参数2(包括)
print(player[:])            #遍历所有的元素
print(player[-3:])          #最右侧往左数数
print(player[-3:-2])        #倒数第三个到倒数第二个,那就是倒数第二个
print(player[-2:-3])        #倒数第二个到倒数第三个,为空,输出[]
for a in player[:3]:        #遍历切片
    print(a)
['charles', 'martina', 'michael']
['martina', 'michael']
['charles', 'martina', 'michael']
['charles', 'martina', 'michael', 'florence', 'eli']
['michael', 'florence', 'eli']
['michael']
[]
charles
martina
michael
player=['charles','martina','michael','florence','eli']
a=player
player.append('kid')        #a=player这种操作是将a与player绑定在一起,两个变量进行了关联
b=player[:]                 #b=player[:]是复制操作,两个变量并没有绑定在一起,所以可以分别操作
b.append('apc')
print(player)
print(a)
print(b)
['charles', 'martina', 'michael', 'florence', 'eli', 'kid']
['charles', 'martina', 'michael', 'florence', 'eli', 'kid']
['charles', 'martina', 'michael', 'florence', 'eli', 'kid', 'apc']

书中有一段话:列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网站的用户列表或游戏中的角色列表至关重要。然而,有时候你需要创建一系列不可修改的元素,元组可以满足这种需求。Python将不能修改的值成为不可变的,而不可变的列表被称为元组。
元组看起来很像列表,但使用圆括号而非中括号来标识。定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样。

a=(1,2)
for a in a:
    print(a)
1
2
a=(1,2)
a=(2,4)         #可对变量重新赋元组,从而更新元组,但是不能改变某个元组内部的值
for a in a:
    print(a)
2
4

书中有一段话,严格地说,元组是由逗号标识的,圆括号只是让元组看起来更整洁、更清晰。如果你要定义只包含一个元素的元组,必须在这个元素后面加上逗号,创建只包含一个元素的元组通常没有意义,但自动生成的元组有可能只有一个元素。

a=(1,)
b=(2)
print(a)            #直接输出a,不是以遍历的形式输出
for a in a:
    print(a)
# for b in b:
#     print(b)      # b这种定义,不是元组,不能使用遍历这种方法输出
print(a)            #直接输出a,不是以遍历的形式输出
print(b)            #这种方法输出形式是可以的
(1,)
1
1
2

第六章:字典

alien={'color':'green'} #字典使用的是大括号{}
a=alien['color']
print(a)
print(alien)
green
{'color': 'green'}
alien={'color':'green'} #字典定义使用的是大括号{},但是对其中某一个组成元素操作使用的是中括号[]
alien['x']=0
alien['y']=20
a=alien['color']
print(a)
print(alien)
green
{'color': 'green', 'x': 0, 'y': 20}
alien={'color':'green'} #字典定义使用的是大括号{},但是对其中某一个组成元素操作使用的是中括号[]
alien['x']=0
alien['y']=20
a=alien['color']
print(a)
print(alien)
alien['color']='yellow'   #改变元素的值
print(alien)
green
{'color': 'green', 'x': 0, 'y': 20}
{'color': 'yellow', 'x': 0, 'y': 20}
alien={'x':0,'y':25,'speed':'medium'}
if alien['speed']=='fast':
    a=1
elif alien['speed']=='medium':
    a=2
else: 
    alien['speed']=='slow'
a=3
alien['x']=alien['x']+a
print(alien['x'])
print(alien['speed'])
3
medium
alien={'x':0,'y':25,'speed':'medium'}
print(alien)
del alien['x']
print(alien)
{'x': 0, 'y': 25, 'speed': 'medium'}
{'y': 25, 'speed': 'medium'}
alien={
    'x':0,
    'y':25,
    'speed':'medium'
}
print(alien)
del alien['x']
print(alien)
{'x': 0, 'y': 25, 'speed': 'medium'}
{'y': 25, 'speed': 'medium'}
alien={
    'x':1,
    'y':25,
    'speed':'medium'
}
a=alien.get('x',0)
b=alien.get('z',0) #get()函数,第一个参数是去寻找的对象,如果找到了,将其值返回,如果没找到,返回第二个参数
print(a)
print(b)
1
0
user_0={
    'username':'efermi',
    'first':'enrico',
    'last':'fermi'
}
for key,value in user_0.items():  #两个参数,第一个对应健名,第二个对应键值;items()返回一个键值对列表
    print(key)
    print(value)

username
efermi
first
enrico
last
fermi
user_0={
    'username':'efermi',
    'first':'enrico',
    'last':'fermi'
}
for key in user_0.keys():  #keys()返回字典的列表,列表里面包含字典中的所有键
    print(key)
username
first
last
user_0={
    'username':'efermi',
    'first':'enrico',
    'last':'fermi'
}
for key in sorted(user_0.keys()):  #keys()返回字典的列表,列表里面包含字典中的所有键;sorted()对字典按照键名进行排序,返回一个排列好顺序的列表;
    print(key)
first
last
username
user_0={
    'username':'efermi',
    'first':'enrico',
    'last':'fermi'
}
for key in user_0.values():  #values()返回一个列表,列表中包含的是键值
    print(key)
efermi
enrico
fermi
user_0={
    'username':'efermi',
    'first':'enrico',
    'last':'fermi',
    'middle':'fermi'
}
for a in user_0.values():  #values()返回一个列表,列表中包含的是键值
    print('a=',a)
for b in set(user_0.values()):  #set()返回一个列表,列表中包含的是键值(筛选掉重复的)
    print('b=',b)

a= efermi
a= enrico
a= fermi
a= fermi
b= efermi
b= fermi
b= enrico
  • 字典与列表的三中嵌套形式:字典嵌套在列表里(字典列表)、列表嵌套在字典里(在字典里存储列表)、字典嵌套在字典里(在字典里储存字典);
#字典嵌套在列表里(字典列表)
a={'name':'dog',
   'color':'yellow',
   'money':100
  }
b={'name':'cat',
   'color':'white',
   'money':1000
  }
c={'name':'clock',
   'color':'blue',
   'money':30
  }
d={'name':'bag',
   'color':'black',
   'money':300
  } 
d=[a,b,c,d]                            
for z in d:
    print(z)

{'name': 'dog', 'color': 'yellow', 'money': 100}
{'name': 'cat', 'color': 'white', 'money': 1000}
{'name': 'clock', 'color': 'blue', 'money': 30}
{'name': 'bag', 'color': 'black', 'money': 300}
pizza={
    'crust':'thick',
    'toppongs':['mushroom','extra cheese'],
}
print(pizza['crust'])
thick

#字典嵌套在列表里(字典列表)
things={
    'a':{'name':'dog',
         'color':'yellow',
         'money':100
        },
    'b':{
        'name':'cat',
        'color':'white',
        'money':1000
    },
    'c':{
        'name':'clock',
        'color':'blue',
        'money':30
    },
    'd':{
        'name':'bag',
        'color':'black',
        'money':300
    }
}                            
for z ,l  in things.items() :
    print(z,l)
for x in things.keys():
    print(x)
for y in things.values():
    print(y)    
a {'name': 'dog', 'color': 'yellow', 'money': 100}
b {'name': 'cat', 'color': 'white', 'money': 1000}
c {'name': 'clock', 'color': 'blue', 'money': 30}
d {'name': 'bag', 'color': 'black', 'money': 300}
a
b
c
d
{'name': 'dog', 'color': 'yellow', 'money': 100}
{'name': 'cat', 'color': 'white', 'money': 1000}
{'name': 'clock', 'color': 'blue', 'money': 30}
{'name': 'bag', 'color': 'black', 'money': 300}

第七章:用户输入和while循环

massage=input('please input a number:')
print('massage=',massage)
please input a number:12
massage= 12
a='你好啊,小朋友'
a+=',吃饭了吗?'
name=input(a)
print(name)

你好啊,小朋友,吃饭了吗?yes
yes
a='18'
b=int(a)         #int(),将变量类型强制转换为int型
print(b+1)
19
3%2 #求模运算符%
1
a=['1','2','1','4','5']
while '1' in a:
    print('hello word')
    break
hello word
a=['1','2','1','4','5']
while '1' in a:
    a.remove('1')
    print('hello word')
hello word
hello word
a=['1','2','1','4','5']
while '1' in a:
    a.remove('1')
    print('hello word')
    break
hello word
a=['1','2','1','4','5']
while '1' in a:
    a.remove('1')
    print('hello word')
    continue
hello word
hello word
responses={}
polling_active=True
while polling_active:
    name=input('what is your name?')
    reponse=input('which mountain would you like to climb someday?')
    responses[name]=reponse
    repeat=input('would you like to let another person repond?(yes/no)')
    if repeat=='no':
        polling_active=False
print('\n---poll results---')
for name,response in responses.items():
    print(f'{name} would like to climb {response}.')
what is your name?sun
which mountain would you like to climb someday?west
would you like to let another person repond?(yes/no)yes
what is your name?yu
which mountain would you like to climb someday?hill
would you like to let another person repond?(yes/no)no

---poll results---
sun would like to climb west.
yu would like to climb hill.

第八章:函数

def describe_pet(pet_name,animal_type='dog'):
    print(f'\nI have a{animal_type}.')
    print(f"My {animal_type}'s name is {pet_name.title()}.")
    
describe_pet('willie')
describe_pet(pet_name='willie')

describe_pet('harry','hamster')
describe_pet(pet_name='harry',animal_type='hamster')
describe_pet(animal_type='hamster',pet_name='harry')

I have adog.
My dog's name is Willie.

I have adog.
My dog's name is Willie.

I have ahamster.
My hamster's name is Harry.

I have ahamster.
My hamster's name is Harry.

I have ahamster.
My hamster's name is Harry.
def make_pizza(*toppings):     #*表示建立一个元组toppings,将所有的变量都收入进这个元组里,来着不拒
#打印顾客点的所有配料
    print(toppings)
make_pizza('pepperoni')
make_pizza('mushrooms','green peppers','extra cheese')
('pepperoni',)
('mushrooms', 'green peppers', 'extra cheese')
def make_pizza(size,*toppings):     #默认函数的第一个参数储存在size中,*表示建立一个元组toppings,将第一个参数后面的所有的参数都收入进这个元组里,来着不拒
#打印顾客点的所有配料
    print(size,toppings)
make_pizza(16,'pepperoni')
make_pizza(20,'mushrooms','green peppers','extra cheese')
16 ('pepperoni',)
20 ('mushrooms', 'green peppers', 'extra cheese')
def build_profile(first,last,**user_info):         #**user_info中的两个星号让python创建一个名为user_info的空字典,并将收到的所有名称值对都放在这个字典里
    user_info['first_name']=first 
    user_info['last_name']=last
    return user_info

user_profile=build_profile('albert','einstein',
                          locatinon='princeton',
                           field='physics'
                          )
print(user_profile)
{'locatinon': 'princeton', 'field': 'physics', 'first_name': 'albert', 'last_name': 'einstein'}

多种导入模块(函数库)的方法

#引用函数库里的函数的时候形如(注意中间用点进行引用):module_name.function_name  
import module_name                                              
#导入模块(函数库)中的特定函数,使用函数的时候不需再采用点来引用
from module_name import function_name            
#导入模块(函数库)中的所有函数,使用*代替所有函数,使用函数的时候不需再采用点来引用
from module_name import *    
#导入模块(函数库)中的特定函数,并且使用另一个名字代替函数名,使用函数的时候不需再采用点来引用
from module_name import function_name as mp               
#导入模块(函数库),并且函数库的名字用另一个名字来代替,引用函数库里的函数的时候形如(注意中间用点进行引用,mp.function_name 
import module_name as mp                                                 

第九章:类

class Dog:                             #根据约定,在Python中,首字母大写的名称指的是类,类中的函数被称为方法
    
    def __init__(self,name,age):       
    #__init__是()是一个特殊的方法,开头和结尾各有两个下划线(一种约定,务必遵守)
    #每当根据类创建实例的时候,Python会自动运行它,形参self必不可少,且必须位于其他形参前面,在调用的时候,Python自动调用
    #所有形参self不需要在调用的时候赋值给self,self是指向实例本身的引用,让实例能够访问类中的属性和方法
    #创建实例的时候,Python将调用类的方法__init__(),只需要通过实参向类传递后面的参数,self会自动传递,因此不需要传递它
        self.name=name
        self.age=age
    #以self为前缀的变量(可通过实例访问的变量叫做属性)可供类中的其他方法(函数)使用,可以通过类的任何实例来访问
        
    def sit(self):
        print(f'{self.name} is now sitting.')
    
    def roll_over(self):
        print(f'{self.name} rolled over!')

my_dog=Dog('Willie',6)
#让Pthon创建一条名为'Willie'、年龄为6的小狗。遇到这行代码时,Python使用实参'Willie'和6调用Dog类的方法__init__()。
#__init__()创建一个表示特定小狗的实例,并通过提供的值来设置属性name和age。接下来Python返回一个表示特定小狗的实例
#通常,首字母大写的名称表示类,小写的名称指的是根据类创建的实例

print(f"My dog's name is {my_dog.name}.")   #访问实例的属性,可用句点表示法
print(f"My dog is {my_dog.age} year old.")

my_dog.sit()           
#根据类创建实例后,就能使用句点表示法来调用类中定义的任何方法了
#要调用方法,可指定实例的名称和要调用的方法,并用句点分割
#遇到代码my_dog.sit()时,Python在类Dog中查找方法sit()并运行其代码
my_dog.roll_over()
    
My dog's name is Willie.
My dog is 6 year old.
Willie is now sitting.
Willie rolled over!
class Dog:                          
    
    def __init__(self,name,age):       
        self.name=name
        self.age=age
        
    def sit(self):
        print(f'{self.name} is now sitting.')
    
    def roll_over(self):
        print(f'{self.name} rolled over!')

my_dog=Dog('Willie',6)
my_dog.age=8           #直接修改实例的属性值


print(f"My dog's name is {my_dog.name}.")   
print(f"My dog is {my_dog.age} year old.")

my_dog.sit()           
my_dog.roll_over()
    
My dog's name is Willie.
My dog is 8 year old.
Willie is now sitting.
Willie rolled over!
class Dog:                          
    
    def __init__(self,name,age):       
        self.name=name
        self.age=age
    
    def update_age(self,new_age):
        self.age=new_age
        
    def sit(self):
        print(f'{self.name} is now sitting.')
    
    def roll_over(self):
        print(f'{self.name} rolled over!')

my_dog=Dog('Willie',6)
my_dog.update_age(8)           #通过方法修改实例的属性值


print(f"My dog's name is {my_dog.name}.")   
print(f"My dog is {my_dog.age} year old.")

my_dog.sit()           
my_dog.roll_over()
    
My dog's name is Willie.
My dog is 8 year old.
Willie is now sitting.
Willie rolled over!
class Car:               #创建子类时,父类必须包含在当前文件中、且位于子类前面
    def __init__(self,make,model,year):
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=0
        
    def get_descriptive_name(self):
        long_name=f"{self.year} {self.make} {self.model}"
        return long_name.title()
    
    def read_odometer(self):
        print(f"This car has {self.odometer_reading} miles on it.")
    
    def update_odemeter(self,mileage):
        if mileage>=self.odometer_reading:
            self.odometer_reading=mileage
        else:
            print("You can't roll back an odometer!")
    
    def increment_odometer(self,miles):
        self.odometer_reading+=miles


class ElectricCar(Car):          #定义子类时,必须在圆括号里指定父类的名称
    
    def __init__(self,make,model,year):    #子类的__init__方法,接受创建Car实例所需的信息    
        #super()是一个特殊的函数,能够调用父类的方法__init__,让子类包含这种方法中定义的所有属性
        #父类也成为超类(superclass) ,名称super由此而来
        super().__init__(make,model,year) 
        
my_tesla=ElectricCar('tesla','model s',2019)
print(my_tesla.get_descriptive_name())
2019 Tesla Model S

class Car:         
    
    def __init__(self,make,model,year):
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=0
        
    def get_descriptive_name(self):
        long_name=f"{self.year} {self.make} {self.model}"
        return long_name.title()
    
    def read_odometer(self):
        print(f"This car has {self.odometer_reading} miles on it.")
    
    def update_odemeter(self,mileage):
        if mileage>=self.odometer_reading:
            self.odometer_reading=mileage
        else:
            print("You can't roll back an odometer!")
    
    def increment_odometer(self,miles):
        self.odometer_reading+=miles
           
    def fill_gas_tan(self):
        print("This car needs 50L gas to fill a tank!")


class ElectricCar(Car):         
    
    def __init__(self,make,model,year):   
        super().__init__(make,model,year) 
        self.battery_size=75
    
    def descibe_battery(self):
        print(f"This car has a {self.battery_size}-kwh battary.")
    
    def fill_gas_tan(self):     #将父类中的方法直接进行重写
        print("This car doesn't need a gas tank!")
    
        
my_tesla=ElectricCar('tesla','model s',2019)
my_car=Car('BYD','han',2020)    #在子类中对父类的方法改写对父类没有影响 

print(my_tesla.get_descriptive_name())
my_tesla.descibe_battery()
my_tesla.fill_gas_tan()
my_car.fill_gas_tan()
2019 Tesla Model S
This car has a 75-kwh battary.
This car doesn't need a gas tank!
This car needs 50L gas to fill a tank!
class Car:         
    
    def __init__(self,make,model,year):
        self.make=make
        self.model=model
        self.year=year
        self.odometer_reading=0
        
    def get_descriptive_name(self):
        long_name=f"{self.year} {self.make} {self.model}"
        return long_name.title()
    
    def read_odometer(self):
        print(f"This car has {self.odometer_reading} miles on it.")
    
    def update_odemeter(self,mileage):
        if mileage>=self.odometer_reading:
            self.odometer_reading=mileage
        else:
            print("You can't roll back an odometer!")
    
    def increment_odometer(self,miles):
        self.odometer_reading+=miles
           
    def fill_gas_tan(self):
        print("This car needs 50L gas to fill a tank!")

class Battery:
    
    def __init__(self,battery_size=75):
        self.battery_size=battery_size
        
    def describe_battery(self):
        print(f"This car has a {self.battery_size}-kwh battery.")
    
    def get_range(self):
        if self.battery_size==75:
            range=260
        elif self.battery_size==100:
            range=315
        print(f"This car can go about {range} miles on a full charge.")




class ElectricCar(Car):         
    
    def __init__(self,make,model,year):   
        super().__init__(make,model,year) 
        self.battery=Battery() #将属性设置为一个类(上面Battery定义的类),将属性拆分为多个属性(多个属性以一个类的形式存在)
    
    
        
my_tesla=ElectricCar('tesla','model s',2019)


print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()
2019 Tesla Model S
This car has a 75-kwh battery.
This car can go about 260 miles on a full charge.

类模块的导入和函数的导入方法和规则类似

第十章:文件和异常

with open('pi_digits.txt') as file_object:
    #文件只有先打开,才能访问它。open()接受一个参数:要打开的文件的名称
    #Python在当前执行的文件所在位置中查找指定的文件;Open()返回一个表示文件的对象,并且将对象赋值(本例中赋值为file_object)
    #关键字with在不需要访问文件时自动将其关闭
    #open()对应着close(),但是程序存在bug,close()未执行,文件将不会关闭,使用with,Python会在合适的时候将文件自动关闭
    contents=file_object.read()   #read()读取文件的全部内容
print(contents)  
#输出值最后面有一个空行,因为read()到达文件末尾时返回一个空字符串,显示出来就是空行,解决办法是在函数调用print时使用rstrip()
print(1+1)
3.1415926535
  8979323846
  2643383279
2
with open('pi_digits.txt') as file_object:
    contents=file_object.read()   
print(contents.rstrip())
print(1+1)
3.1415926535
  8979323846
  2643383279
2

通过使用绝对路径,可以读取系统中任何地方的文件

file_path='/home/ehmatthes/other_files/text_files/filename.txt'
with open(file_path) as file_object:

相对路径的表示方法:

with open ('text_files/filename.txt') as file_object:

如果在文件路径中直接使用反斜杠,将引发错误,因为反斜杠用于对字符串中的字符进行转义
例如,对于路径

C:\path\to\file.txt

其中的\t将被解读为制表符。如果一定要加反斜杠,可对路径中的每个反斜杠都进行转义,如

C:\\path\\to\\file.txt
filename='pi_digits.txt'

with open (filename) as file_object:
    for line in file_object:   #为了查看内容,通过对文件对象执行循环来遍历文件的每一行
        print(line)
3.1415926535

  8979323846

  2643383279
filename='pi_digits.txt'

with open (filename) as file_object:
    for line in file_object:  
        print(line.rstrip())   #为了消除多余的空白行,可在函数调用print()中使用rstrip()
3.1415926535
  8979323846
  2643383279
filename='pi_digits.txt'

with open (filename) as file_object: #with 关键字使得文件内容的使用都在冒号范围内
    lines=file_object.readlines()    
    #为了在with范围外使用文件内容,可以将文件的内容的各行都存储在一个列表里,这样可以在需要的时候处理文件里的内容
    #readlines()函数从文件中读取每一行
    
for line in lines:  
    print(line.rstrip())   #为了消除多余的空白行,可在函数调用print()中使用rstrip()
3.1415926535
  8979323846
  2643383279
filename='pi_digits.txt'

with open (filename) as file_object: 
    lines=file_object.readlines()    

pi_string=''   #创建一个变量pi_string,指向圆周率的值,接下来使用循环,将数据的各行加入pi_string,并删除末尾的换行符
    
for line in lines:  
    pi_string+=line.rstrip()
    
print(pi_string)
print(len(pi_string))
3.1415926535  8979323846  2643383279
36
filename='pi_digits.txt'

with open (filename) as file_object: 
    lines=file_object.readlines()    

pi_string=''
    
for line in lines:  
    pi_string+=line.strip()  #变量pi_string指向的字符串包含原来位于每行左边的空格,为删除这些空格,可使用strip(),而非rstrip()
    
print(pi_string)
print(len(pi_string))
3.141592653589793238462643383279
32
filename='pi_million_digits.txt'

with open(filename) as file_object:
    lines=file_object.readlines()

pi_string=''

for line in lines:
    pi_string+=line.strip()

print(f"{pi_string[:52]}...") #输出字符串小数点后50位(整数位+小数位=51位)
print(len(pi_string))

3.14159265358979323846264338327950288419716939937510...
1000002
filename='programing.txt'

with open(filename,'w')as file_object:
    #本例中,调用open()时提供两个实参,第一个实参也时要打开的文件的名称,第二个实参('w')告诉Python,要以写入模式打开这个文件
    #打开文件时,可指定读取模式('r')、写入模式('w')、附加模式('a')或读写模式('r+'),如果省略了模式参数,Python默认以只读模式打开文件
    #如果写入的文件不存在,函数open()将自动创建它
    #然而以只读模式打开文件时千万要小心,因为如果指定的文件已经存在,Python将在返回文件对象前清空改文件的内容
    file_object.write("I love programing.\n")
    file_object.write("I love creating new games.\n")
filename='programing.txt'

with open(filename)as file_object:
    for line in file_object.readlines():
        print(line.rstrip())
        
I love programing.
I love creating new games.
  • 本例中,调用open()时提供两个实参,第一个实参也时要打开的文件的名称,第二个实参(‘w’)告诉Python,要以写入模式打开这个文件;
  • 打开文件时,可指定读取模式(‘r’)、写入模式(‘w’)、附加模式(‘a’)或读写模式(‘r+’),如果省略了模式参数,Python默认以只读模式打开文件;
  • 如果写入的文件不存在,函数open()将自动创建它,然而以只读模式打开文件时千万要小心,因为如果指定的文件已经存在,Python将在返回文件对象前清空改文件的内容;
  • 如果要给文件添加内容,而不是覆盖原有的内容,可以以附加模式打开。以附加模式打开文件时,Python不会再返回文件对象前清空文件的内容,而是将写入文件的行添加到文件末尾,如果指定的文件不存在,Python将为你创建一个空文件。
filename='programing.txt'

with open(filename,'a') as file_object:
        file_object.write("I also love finding meaning in large datasets.\n")
        file_object.write("I love creating apps that can run in a browser.\n")
filename='programing.txt'

with open(filename)as file_object:
    for line in file_object.readlines():
        print(line.rstrip())
        
I love programing.
I love creating new games.
I also love finding meaning in large datasets.
I love creating apps that can run in a browser.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值