1.4 Python语言基础要素
续前篇:《Python数据分析基础》第一章-Python基础(1.4.5-1.4.7)—— Flerken101
1.4.8 控制流
1.4.8.1 if-else
x = 5
# if-else语句
if x > 4 or x != 9: # or 操作符,只要两个条件有一个为真,那么就为真
print("Output #124: {}".format(x))
else:
print("Output #124: x is not greater than 4")
1.4.8.2 if-elif-else
x = 5
# if-elif-else语句
if x > 6:
print("Output #125: x is greater than six")
elif x > 4 and x == 5:
print("Output #125: {}".format(x*x))
elif x == 6: # 什么也不做
pass #必须写一个pass空语句,表示什么也不做
else: # x <= 4
print("Output #125: x id not greater than 4")
1.4.8.3 for循环
Python for i in range ()用法详解 —— Vincent__Lai
y = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',\
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
z = ['Annie', 'Betty', 'Claire', 'Daphne', 'Ellie',\
'Franchesca', 'Greta', 'Holly', 'Isabel', 'Jenny']
# 打印出列表y 中的每个值
print("Output #126: ")
for month in y: # month是一个临时占位符,表示序列中的各个值,并且只在 for 循环中有意义。
print("{:s} ".format(month))
# 对于 0~9 的整数序列中的一个整数 i,打印出整数 i,再打印一个空格,然后打印出列表 z 中索引值为 i 的元素值。
print("Output #127: (index value: name in list)")
for i in range(len(z)): # i依次取range函数生成的序列中的整数
print("{0:d}: {1:s}".format(i,z[i]))
# 使用从一个序列z中生成的索引值,来引用另一个序列y中具有同样索引值的元素
print("Output #128: (access elements in y with z's index values)")
for j in range(len(z)): # range(len(z)生成从0到9的整数序列,并依次赋值给变量j
if y[j].startswith('J'): # 测试列表y 中索引值为j的元素,是否以大写字母J开头
print("{:s}".format(y[j])) # 是的话,就将列表y中 这个索引值j处的元素y[j] 打印出来
# 使用for循环依次打印出字典的每个键-值对
another_dict = {'x':'printer', 'y':5, 'z':['star','circle',9]}
print("Output #129: ")
for key,value in another_dict.items():
print("{0:s}, {1}".format(key,value))
'''
another_dict.items()生成一个列表,列表中的每个元素是一个元组,每个元组中包含两个元素,即每个 “键-值对” 的字典键值和字典值。
一次性定义两个临时占位符 key 和 value,依次将列表中每个元组元素的前一个元素和后一个元素赋值给它们,
再将其依次打印出来。 '''
1.4.8.4 简化for循环:列表、集合与字典生成式
所有生成式的语句 [ ] 或 { } 中都包含三部分:
单个/多个临时占位符(或用临时占位符表示的表达式) + for循环语句(可以有多个) + if判断条件(可省略)
如以下三种都是列表生成式语句:
[ x for x in my_data]
[x * x for x in range(1, 11) if x % 2 == 0]
[m + n for m in ‘ABC’ for n in 'XYZ ']
列表生成式—— 廖雪峰
利用 省略生成式中if判断条件 和 set()方法,可以找出列表中不重复的元素。
但这两种方法,都仅适用于 元组集合的列表 [(), (), ()] 。
其中,set方法的输出结果格式总为 {(), (), ()}
不适用于列表集合的列表,即不适用于[[], [], []] 形式的列表。
对于单个字符的列表[a,b,c,c] ,仅可以使用 set()方法 找出列表中不重复的元素,
且输出结果格式为 { a, b, c },不是列表、元组,也不是字典。
1.4.8.4.1 列表生成式
'''
列表生成式:
对象:一个列表,其中的元素或为单个字符,或都为列表[[], [], []]
括号:方括号 []
语句:[临时占位符 for 临时占位符 in 列表名称 if 判断条件]
'''
# 对于my_data中的每一行,如果这行中索引位置2的值(即第三个值)大于5,则保留这一行
my_data = [[1,2,3], [4,5,6], [7,8,9]]
rows_to_keep = [row for row in my_data if row[2] > 5 ]
print("Output #130: (list comprehension): {}".format(rows_to_keep))
# 使用set()方法找出列表中不重复的元素,仅有这一种方式
#【 set方法不适用于列表集合的列表[[], [], []] 】
my_data = [1,2,3,4,5,6,7,8,9,7,8,9]
rows_to_keep = set(my_data)
# 注意输出结果的格式,输出的不是列表,也不是字典
print("Output ###: (set function): {}".format(rows_to_keep))
#输出:Output ###: (set function): {1, 2, 3, 4, 5, 6, 7, 8, 9}
# 当省略列表生成式中的if判断条件时,则什么也不做,原样输出
my_data1 = [[1,2,3], [4,5,6], [7,8,9], [7,8,9]]
rows_to_keep1 = [row for row in my_data1]
print("Output ###1: (没有if, list comprehension): {}".format(rows_to_keep1))
my_data2 = [1,2,3,4,5,6,7,8,9,7,8,9]
rows_to_keep2 = [row for row in my_data2]
print("Output ###2: (没有if, list comprehension): {}".format(rows_to_keep2))
1.4.8.4.2 集合生成式
'''
集合生成式:
对象:一个列表,其中的元素都为元组 [(), (), ()]
括号:花括号 {}
语句:{临时占位符 for 临时占位符 in 元组集合的列表名称 if 判断条件}
'''
# 对于my_data中的每个元组,如果它是一个唯一的(不重复的)元组,则保留这个元组
my_data = [(1,2,3), (4,5,6), (7,8,9), (7,8,9)]
set_of_tuples1 = {x for x in my_data} # 当省略if判断条件时,则为找出列表中不重复的元组
print("Output #131 (set comprehension): {}".format(set_of_tuples1))
# 注意输出结果的格式为 {(), (), ()}
# 与不带if判断条件的集合生成式 等价的 set方法 (set方法仅适合于元组集合和单个字符元素的列表,不适用于列表集合的列表 )
set_of_tuples2 = set(my_data)
print("Output #132 (set function): {}".format(set_of_tuples2))
# 注意输出结果的格式为 {(), (), ()}
1.4.8.4.3 字典生成式
'''
字典生成式:
对象:一个字典,其中的元素都为“键-值对” key : value
括号:花括号 {}
语句:{临时占位符(形式必须为key : value) for 临时占位符(形式为key, value) in 字典名称.items() if 判断条件}
注意:在字典生成式中,要先用 字典名称.items() 获取 以键-值对形成的元组为元素的列表,
即:[(key1, value1), (key2, value2), (key3, value3)]
然后对该元组集合的列表使用生成式语句。
'''
# 对于my_dictionay中的每个键-值对,如果值大于10,则保留这个键-值对。
my_dictionary = {'customer1': 7, 'customer2': 9, 'customer3': 11}
my_results = {key : value for key, value in my_dictionary.items() if value > 10}
print("Output #133 (dictionary comprehension): {}".format(my_results))
# 当字典生成式中省略if判断条件时,则为找出列表中不重复的元组(即字典中不重复的 “键-值对” )
my_dictionary = {'customer1': 7, 'customer2': 9, 'customer3': 11, 'customer3': 11}
my_results = {key : value for key, value in my_dictionary.items() }
print("Output ### (没有if, dictionary comprehension ): {}".format(my_results))
# 与不带if判断条件的字典生成式 等价的 set方法(set方法仅适合于元组集合和单个字符元素的列表,不适用于列表集合的列表 )
my_results = set( my_dictionary.items())
#输出形式与上面的有所不同
print("Output ### (set function): {}".format(my_results))
1.4.8.5 while循环
print("Output #134: ")
x = 0
while x < 11:
print("{0:d}".format(x))
x += 1
1.4.8.6 函数
# 定义一个计算一系列数值均值的函数
# 书写方式一:
def getMean(numericValues):
if(len(numericValues) > 0):
return sum(numericValues)/len(numericValues)
else:
return float('nan')
my_list = [2, 2, 4, 4, 6, 6, 8, 8]
print("Output #135 (mean): {:.2f}".format(getMean(my_list)))
# 方式三:调用
import numpy as np # 模块numpy中已存在方法mean()
print(np.mean(my_list))
# 书写方式二:return、if、else 这三个必须都得在同一行
def getMean(numericValues):
return sum(numericValues)/len(numericValues) if len(numericValues) > 0 else float('nan')
my_list = [2, 2, 4, 4, 6, 6, 8, 8]
print("Output #135 (mean): {:.2f}".format(getMean(my_list)))
1.4.8.7 异常
Python 中包含了若干种内置的异常对象。
常用的异常包括:
IOError、AttributeError、ImportError等分别代表的异常——Sherry_shiry
IOError:输入输出异常
IndexError:下标索引超出序列边界
KeyError:试图访问你字典里不存在的键
NameError:使用一个还未赋予对象的变量
SyntaxError:Python代码逻辑语法出错,不能执行
AttributeError:试图访问一个对象没有的属性
ImportError:无法引入模块或包,基本是路径问题
IndentationError:缩进错误,代码没有正确的对齐
TypeError和ValueError的区别 —— qq_40832034
TypeError:函数或方法接受了不适当的【类型】的参数,比如sum(‘nick’),sum函数不接受字符串类型。
ValueError:函数或方法虽然接受了正确的【类型】的参数,但是该参数的【值】不适当,比如int(‘nick’),int函数可以接受字符串类型,但是’nick’字符串不具备表示一个整数的含义,如int(‘123’)可以。
Python:UnicodedecodeError编码问题解决方法汇总-彻底解决 —— tomorrownan
UnicodeError:脚本程序中编码与文件编码不一致
1.4.8.8 try-except
# 定义一个计算一系列数值均值的函数getMean
def getMean(numericValues):
return sum(numericValues)/len(numericValues)
my_list2 = [] # 实参为空列表
# 使用简单形式,即try-except代码块,来处理潜在的错误
try: # 将要执行的代码放在try代码块中
print("Output #138: {}".format(getMean(my_list2)))
except ZeroDivisionError as detail: # except 捕获
print("Output #138 (Error): {}".format(float('nan'))) # 相当于发生ZeroDivisionError错误的情况下,函数的返回值
print("Output #138 (Error): {}".format(detail)) # 将错误的详细信息打印出来
1.4.8.9 try-except-else-finally
# 定义一个计算一系列数值均值的函数getMean
def getMean(numericValues):
return sum(numericValues)/len(numericValues)
my_list2 = [] # 实参为空列表
# 使用完整形式,即try-except-else-finally代码块,来处理潜在的错误
try:
result = getMean(my_list2)
except ZeroDivisionError as detail: # 如果try代码块执行失败,那么就会执行except代码块
print("Output #142 (Error): " + str(float('nan'))) # +号将两个字符串合并输出
print("Output #142 (Error): ", detail) # 将错误ZeroDivisionError的详细信息打印出来
else: # 如果try代码块执行成功,那么就会执行else代码块
print("Output #142 (The mean is): ", result)
finally: # 不管try代码块执行成功还是失败,总是会执行finally模块
print("Output #142 (Finally): The finally block is executed every time")
1.5 读取文本文件
1.5.1 创建文本文件
问题总结python: can‘t open file ‘XXX‘: [Errno 2] No such file or directory —— ++加油呀
import sys
# 读取文件
# 读取单个文件
input_file_name = sys.argv[0] # 获取文件名称
print("要执行的脚本文件名称:" + input_file_name) # 打印文件名称
input_file = sys.argv[1] # 获取文件路径
print("要读取的文本文件路径: " + input_file) #打印文件路径
# 创建一个文件对象,该文件对象中包括:(就像一个列表对象中,包含一些元素一样)
# 以r模式(只读模式)打开 获取到的文件路径input_file指向的文件 中的各个行。
filereader = open(input_file,'r') # 这里的open()为python的内置函数
print("读取到的文本文件对象filereader的类型:" + str(type(filereader))) # <class '_io.TextIOWrapper'>
print("\n\n读取到的文本文件对象filereader的详细内容:")
print(filereader) # 打印文件对象filereader的详细内容(即文件路径input_file指向文件中的各个行)
print("\n\nOutput #143: 读取到的文本文件对象filereader中的各行:")
for row in filereader: # 使用变量row依次读取打开的各个行
print(row.strip()) # 去掉每一行两端的空字符,并将其打印出来
filereader.close() # 关闭该文件对象filereader
# 即关闭以r模式打开的 文件路径input_file指向的文件 中的各个行
假设 脚本 和 要读取的文件 都在桌面上。
cmd:
cd C:\Users\lenovo\Desktop
【命令窗口中的 提示符 一定要是 脚本文件的所在目录/文件夹。】
python first_script.py file_to_read.txt
【这里要执行的脚本 和 要读取的文本文件都在 同一文件夹目录下。】
格式:python 要执行的脚本名称 要读取的文本文件的完整路径 (必须写到文本文件的名称)
这样 Python脚本的命令行参数列表变量sys.argv 才能捕获 脚本名称 和 要读取的文件的路径,并写到相应索引位置处。
1.5.2 脚本和输入文件不在同一位置
当 脚本 和 要读取的文件不在 同一文件下时:
(1)同样,要先将 命令窗口中的提示符 指示为 脚本文件的所在目录/文件夹。
在命令窗口中,在任何目录下,使用命令py -0p 【其中0是零】
可显示已安装的 python 版本号及其所在的路径 的列表。 可用于配置环境变量。
在命令窗口中,若 提示符 为 C:\> ,含义是:
C: 说明现在的工作盘是c盘,
\ 指示当前的工作目录是根目录,
> 的作用是把工作目录【可以是根目录也可以不是】和我们要输入的命令分隔开来。
若要转到某一指定目录,则需要先转到该指定目录的根目录,再使用命令:cd 指定目录的完整路径
返回到 当前根目录下的上一级目录,使用命令:cd ..
直接返回到 当前工作目录下的根目录,使用命令:cd \
从当前工作目录下返回到目标根目录,使用命令:目标目录: (如C: 或 D: 大小写均可)
在某一目录/文件夹下,输入 dir 可以查看当前文件夹中的所有文件
输入: python 脚本文件名称.py 则可运行位于该文件夹中的目标python文件
(2)然后,在该 脚本文件的所在目录 下输入:
python 要执行的脚本名称 要读取的文本文件的完整路径 (必须写到文本文件的名称)
这样 Python脚本的命令行参数列表变量sys.argv 才能捕获 脚本名称 和 要读取的文件的路径,并写到相应索引位置处。
------------------------------------------------------------------------------------------------------------------------
假设 脚本 和 要读取的文件 都更换了位置,且不在同一位置:
要执行的脚本文件名称:first_script.py
要执行的脚本文件路径:D:\百度网盘\Python数据分析基础
要读取的文本文件名称:file_to_read.txt
要读取的文本文件的完整路径:D:\百度网盘\Python数据分析基础\GUI-IDE-IDLE\file_to_read.txt
则要在命令窗口中依次输入:
d: ———— 切换到脚本文件所在的根目录
cd D:\百度网盘\Python数据分析基础 ———— 切换到脚本文件所在的目录/文件夹
python first_script.py D:\百度网盘\Python数据分析基础\GUI-IDE-IDLE\file_to_read.txt ——执行该文件夹中的脚本,并根据要读取的文件的完整路径 读取目标 .txt 文本文件
1.5.3 使用 with 语句来读取文件(新型语法)
上面的方式使文件对象一直处于打开状态,直到使用 close 函数明确地关闭或直到脚本结束。
尽管这种做法一般没有问题,但不够清晰,还被证明在更复杂的脚本中会导致错误。
从 Python 2.5 开始,可以使用 with 语句来创建文件对象。这种语法在 with 语句结束时会自动关闭文件对象。
import sys
# 读取文件
# 读取单个文件
input_file_name = sys.argv[0] # 获取要执行的脚本文件名称
print("要执行的脚本文件名称:" + input_file_name) # 打印要执行的脚本文件名称
input_file = sys.argv[1] # 获取要读取的文本文件路径
print("要读取的文本文件路径: " + input_file) #打印要读取的文本文件路径
# 使用 with 语句来创建文件对象,该文件对象中包括:
# 以r模式(只读模式)打开 获取到的文件路径input_file指向的文件 中的各个行。
# 并使用as短语,将该文件对象赋值给变量filereader,以便引用
with open(input_file, 'r', newline = '') as filereader:
print("读取到的文本文件对象filereader的类型:" + str(type(filereader))) # <class '_io.TextIOWrapper'>
print("\n\n读取到的文本文件对象filereader的详细内容:")
print(filereader) # 打印文件对象filereader的详细内容(即文件路径input_file指向文件中的各个行)
print("\n\nOutput #144: ")
for row in filereader:
print("{}".format(row.strip())) # 去掉每一行两端的空字符,并将其打印出来
# 在 with 语句结束时会自动关闭文件,因此不需调用close函数来关闭filereader对象
# 即关闭以r模式打开的 文件路径input_file指向的文件 中的各个行
open()函数用法:打开file 并返回相应的 file 对象。
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
其中的 newline 形参
(1)None:默认值,会将所有的换行符替换为系统默认的换行符;
不同操作系统换行符不统一,linux:\n ; windows:\r\n ; mac:\r
【 windows中,\r表示return,是回车,使光标移到行首;\n 是换行,使光标下移一格。】
(2)” :不会对换行符进行替换;
(3)‘\n’、‘\r’ 和 ‘\r\n’ :则表示会将换行符替换为指定的字符串。
去掉打印行中的strip() 方法,将 newline 分别改为 None,‘’ , \n , \r , \r\n,均得到以下输出:
1.6 使用 glob 读取多个文本文件
python中的glob模块函数:glob,iglob和escape的使用 ——Destinesia12
(1)os.path.join(path, paths),就是字符串的拼接,在windows操作系统中:
当第二个参数paths(即所描述的模式*.txt )开头没有 \ \ 时: 【 也可能是\ 】
当第一个参数 文件夹路径path(即inputPath)的结尾没有 \ \ 时,就在其后面添加一个\ \,然后与第二个参数字符串拼接起来。
当第一个参数 文件夹路径path(即inputPath)的结尾有\ \时,就直接与第二个参数字符串拼接起来,并返回一个字符串。
当第二个参数*paths(即所描述的模式 * .txt )开头有 \ \ 时:
省略第一个参数 文件夹路径path(即inputPath),直接返回第二个参数字符串。
如:path 为 D:\百度网盘\Python数据分析基础\GUI-IDE-IDLE\file
*paths 为 ‘ * .txt’
则join函数的返回值为一个字符串:D:\百度网盘\Python数据分析基础\GUI-IDE-IDLE\file*.txt
(2)glob.glob(pathname) 方法返回与 pathname (即join函数返回的字符串) 匹配后的完整路径名称列表。
即要在文件夹D:\百度网盘\Python数据分析基础\GUI-IDE-IDLE\file中寻找以.txt 为后缀的文件 ,
每找到一个之后,就将 * 替换为 具体的文本文件名称,如 file_to_read
然后得到该文本文件的完整路径:D:\百度网盘\Python数据分析基础\GUI-IDE-IDLE\file\file_to_read.txt,并将其作为列表中的一个元素。
依次将该文件夹中的所有.txt文件都读取完,然后返回一个 包含该文件夹中所有.txt文件完整路径的 列表。
(3)for循环中的临时占位符input_file读取列表中的每一个元素,即每一个文本文件的完整路径名称。
所以在open函数的第一个参数中,直接将临时占位符input_file作为了要读取的文本文件的路径。
文件对象 = open (文件路径名, ‘r / w’,newline = None / ‘’ / ‘\n’ / ‘\r’ / ‘\r\n’ )
import sys # System-specific parameters and functions 系统特定的参数和功能
import glob # Unix style pathname pattern expansion Unix样式的路径名模式扩展
import os # Miscellaneous operating system interfaces 其他操作系统接口
# 读取多个文本文件
input_file_name = sys.argv[0] # 获取要执行的脚本文件名称
print("要执行的脚本文件名称:" + input_file_name) # 打印要执行的脚本文件名称
inputPath = sys.argv[1] # 获取要读取的文本文件夹路径
print("要读取的文本文件夹路径: " + inputPath) #打印要读取的文本文件夹路径 D:\百度网盘\Python数据分析基础\GUI-IDE-IDLE\file
allpath = os.path.join(inputPath, '*.txt') # 就是字符串的拼接,返回值将path = inputPath 和 *paths = '*.txt' 拼接起来的字符串
print("\njoin函数返回的所有路径段串联的数据类型为:" + str(type(allpath))) # <class 'str'>
print("join函数返回的所有路径段串联具体内容为:" + allpath) # D:\百度网盘\Python数据分析基础\GUI-IDE-IDLE\file\*.txt
allpath_list = glob.glob(allpath) # 返回与 pathname (即join函数返回的字符串) 匹配后的完整路径名称列表。
print("\nglob函数返回的所有路径段是由 " + str(type(allpath_list)) + "存储的。") # <class 'list'>
print("glob函数返回的列表中的所有元素为:")
for input_file in allpath_list:
print(input_file)
# ['D:\\百度网盘\\Python数据分析基础\\GUI-IDE-IDLE\\file\\another_file_to_read.txt', 'D:\\百度网盘\\Python数据分析基础\\GUI-IDE-IDLE\\file\\file_to_read.txt']
for input_file in glob.glob(os.path.join(inputPath, '*.txt')):
print("\n\n获取到的文本文件完整路径名称为:" + input_file)
with open(input_file, 'r', newline = '') as filereader: # 按照提供的文本文件的完整路径,打开该文本文件
for row in filereader: # 获取文本文件中的每一行
print("{}".format(row.strip())) # 去掉两端的空白符后,打印每一行
脚本名称:first_script.py
脚本路径:D:\百度网盘\Python数据分析基础
要读取的文本文件夹名称:file
要读取的文本文件夹的完整路径:D:\百度网盘\Python数据分析基础\GUI-IDE-IDLE\file
在命令窗口中依次输入:
d: ———— 切换到脚本文件所在的根目录
cd D:\百度网盘\Python数据分析基础 ———— 切换到脚本文件所在的目录/文件夹
python first_script.py D:\百度网盘\Python数据分析基础\GUI-IDE-IDLE\file ——执行该文件夹中的脚本,并根据要读取的文件夹的完整路径 读取所有目标 .txt 文本文件
1.7 写入文本文件
1.7.1 写入.txt文本文件
1.7.1.1 写入单个.txt文本文件
当没有提前创建 空的 要写入内容的 文本文件(但一定要创建其所在的上一级文件夹),且将输出文件放到与脚本不在同一位置的文件夹中时:
将会自动在目标文件夹中,创建一个指定名称的文本文件,同时写入内容。
如果使用可写方式(w模式)打开 已存在且不为空的文件对象,那么其之前的内容会被删除,只保留新写入的内容。
import sys
# 写入一个文本文件
my_letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
number = len(my_letters)
output_file = sys.argv[1] # 获取要写入内容的文件的完整路径
print("获取到的要写入内容的文件的完整路径为:" + output_file) # 打印要写入内容的文件的完整路径
# 创建一个文件对象,该文件对象中包括:
# 以w模式(可写模式)打开 获取到的文件路径output_file指向的文件 中的各个行。
filewriter = open(output_file,'w')
for index_value in range(len(my_letters)): # range函数生成从0 到len(my_letters) -1(也就是number -1)的索引表
if index_value < (number - 1): # 索引值只能取到number - 2
filewriter.write(my_letters[index_value] + '\t')
else: # 当索引值index_value = number - 1,即到达最后一个元素时,后面追加一个换行符(这里的my_letters[index_value]已经是字符串,否则要强制转换为字符串)
filewriter.write(my_letters[index_value] + '\n')
filewriter.close()
print("Output #146: Output writtern to file.")
此处:
脚本名称:first_script.py
脚本路径:D:\百度网盘\Python数据分析基础
要写入的文本文件名称:write_to_file.txt
要写入的文本文件夹的完整路径(一定要写到文件名称):D:\百度网盘\Python数据分析基础\GUI-IDE-IDLE\file2\write_to_file.txt
cmd:
d:
cd D:\百度网盘\Python数据分析基础
python first_script.py D:\百度网盘\Python数据分析基础\GUI-IDE-IDLE\file2\write_to_file.txt
1.7.1.2 写入多个.txt文本文件
Python创建新文件夹并在其中创建文件的方法,或者文件夹路径不存在时自动创建 —— 滚雪球~
1.7.2 追加到文件
1.7.2.1 追加到.txt文本文件
import sys
# 追加进.txt文本文件
my_numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
number = len(my_numbers)
output_file = sys.argv[1] # 获取要追加内容的文件的完整路径
print("获取到的要追加内容的文件的完整路径为:" + output_file) # 打印要追加内容的文件的完整路径
# 创建一个文件对象,该文件对象中包括:
# 以a模式(追加模式)打开 获取到的文件路径output_file指向的文件 中的各个行。
filewriter = open(output_file,'a')
for index_value in range(len(my_numbers)): # range函数生成从0 到len(my_numbers) -1(也就是number -1)的索引表
if index_value < (number - 1): # 索引值只能取到number - 2
filewriter.write(str(my_numbers[index_value]) + ',')
else: # 当索引值index_value = number - 1,即到达最后一个元素时,后面追加一个换行符
filewriter.write(str(my_numbers[index_value]) + '\n')
filewriter.close()
print("Output #146: Output appended to file.")
脚本名称:first_script.py
脚本路径:D:\百度网盘\Python数据分析基础
要追加的文本文件名称:write_to_file.txt(追加到上面的文本文件的后面)
要追加的文本文件的完整路径(一定要写到文件名称):D:\百度网盘\Python数据分析基础\GUI-IDE-IDLE\file2\write_to_file.txt
cmd:
d:
cd D:\百度网盘\Python数据分析基础
python first_script.py D:\百度网盘\Python数据分析基础\GUI-IDE-IDLE\file2\write_to_file.txt
追加相同内容多次后:
1.7.2.2 追加到.csv分隔符文件
当把 要追加的文本文件后缀 名称 改为 .csv时:write_to_file.csv
由于其所在的文件夹中没有该文件,那么就会新创建一个,再追加进相应的内容。
脚本名称:first_script.py(脚本内容不变)
【可以由此看出 .csv分隔符文件中,数据的具体格式。
即:以字符串型而非整形存储数据,且以逗号分隔每个字符串。
使用换行符\n切换到下一行数据。】
脚本路径:D:\百度网盘\Python数据分析基础
要追加的CSV分隔符文件名称:write_to_file.csv
要追加的CSV分隔符文件的完整路径(一定要写到文件名称):D:\百度网盘\Python数据分析基础\GUI-IDE-IDLE\file2\write_to_file.csv
cmd:
d:
cd D:\百度网盘\Python数据分析基础
python first_script.py D:\百度网盘\Python数据分析基础\GUI-IDE-IDLE\file2\write_to_file.csv
追加相同内容多次后: