Python:文件批量创建、读写、复制、内容修改和重命名

版权声明:转载请标明出处 https://blog.csdn.net/w1418899532/article/details/83056356

需求:一个邮件文件对应一个CSV文件,对大量的邮件文件重命名,然后把此文件移动到对应的CSV文件目录下,检查CSV文件中邮件名称内容与格式的正确性,不正确的做出修改,正确的保留。文件夹中最后是一个(视频、邮件等)文件对应一个CSV文件。

  • 1.创建并写入CSV文件

    • os.path.join(path,file):连接两个或多个路径。
    • os.listdir(path):返回指定路径下的文件的名字或者文件夹的名字的列表。
    filelist=os.listdir(path)
    #遍历当前文件夹下的文件
    for file in filelist:
    	i+=1
    	filename=os.path.join(path,file)
    	csvFile=os.path.join(filename,file+'数据表'+'%04d'%i+'.csv')
    	#csv文件存在时直接打开,不存在,则创建
    	with open(csvFile,'wb') as csvFb:
    		#调用writer方法,写入文件对象
    		csv_write = csv.writer(csvFb)
    		csv_write .writerow(["原始文件\t提取类型\t提取内容\t结构"])
    		csv_content=[file+'图片文件'+'%04d'%i+'\t'+'场景'+'\t'+file+'\t'+'非结构化']
    		#内容写入csv文件
    		csv_write .writerow(csv_content)
    
  • 2.复制文件到另一文件夹并重命名

    • endswith():判断字符串是否以指定后缀结尾,是则返回True,否则返回False。可设置起始位置 。
    • split():根据指定分隔符对字符串进行切片分片,返回分割后的字符串列表。可设置第二个num参数,表示仅分割num个子字符串。
      语法:str.split(str="", num=string.count(str)).
      str:分隔符,包括空格、换行(\n)、制表符(\t)等。
      num:分割次数。
    • find():检查字符串是否包含子字符串str,如果指定beg(开始)和end(结束)范围,则检查是否包含在指定范围内,如果包含子字符串,则返回开始的索引值;否则返回-1.
    • shutil.copy(src,dest):文件复制,将src文件复制到dest文件夹中,两个参数都是字符串格式,如果dest是一个文件名称,会被用来当做复制后的文件名称,即等于复制+重命名。
      例如:
    for filename in filedirList:
          if filename.endswith('eml'):
              mainfilename=filename.split('.')[-3]
              
              #很据mainfilename找对应的csv文件
              csvlist=os.listdir(csvpath)
              for csvfile in csvlist:
                  if csvfile.endswith('csv'):
                      if -1 != csvfile.find(mainfilename):
                          #csvfilepath=os.path.join(path,csvfile)
                          #.txt.eml文件复制到对应的csv文件下,重命名为mainfilename.eml
                          srcfile=os.path.join(filedir,filename)
                          dstfile=os.path.join(csvpath, mainfilename+".eml")
                          shutil.copy(srcfile, dstfile)
    
  • 3.读文件
    磁盘中已存在的文件不能任意修改,因此只能先把磁盘中文件一次性读取完,再根据要求修改,然后再全部写入磁盘。

    • readlines():用于读取所有行(直到结束符 EOF)并返回列表。逐行读取文件内容。
    • readline():用于从文件读取整行,包括 “\n” 字符。只读取一行。
    csvfilepath=os.path.join(csvpath, csvfile)
          #读csv文件
           try:
               FileObj = open(csvfilepath, 'r')
               TextLines = FileObj.readlines()
               FileObj.close()
           except IOError as err:
               print ("打开文件%s失败:%s" % (csvfile, err))
    
  • 4.写文件

    #判断行数
    if 1>len(TextLines):
        break
     #行内各项以\t分割
     field_list = TextLines[1].split('\t')
     if 1>len(field_list):
         break
     field_list[0] = mainfilename+".eml"
     #修改第二行内容
     szTemp = ""
     for field in field_list:
         szTemp += field+"\t"
     szTemp = szTemp[:len(szTemp)-1]
     TextLines[1] = szTemp
    
     #写入文件
     try:
         FileObj = open(csvfilepath, 'w')
         
         for text in TextLines:
             TextLines = FileObj.write(text)
         FileObj.close()
     except IOError as err:
         print ("写入文件%s失败:%s" % (csvfilepath, err))
    

猜你喜欢

转载自blog.csdn.net/w1418899532/article/details/83056356