如何根据excel排序文件

时间:2018-02-28 15:03:45

标签: python excel python-2.7

我有一个包含长产品标签名称的Excel文件(目前只处理其中3个):

  1. 4049047000037
  2. 4049047000044
  3. 4049047118954
  4. 我的桌面上有一个名为“1”的文件夹,其中包含标记名称为.jpg的.jpg文件:

    1. 4049047000037.jpg
    2. 4049047000044.jpg
    3. 4049047118954.jpg
    4. 我想写一个代码,如果我的Excel中的标签名称,我想将该.jpg文件复制到另一个文件夹。

      import os
      import pandas as pd
      movdir = ["C:\Users\muhammedcan\Desktop\1"]
      basedir = "C:\Users\muhammedcan\Desktop\2"
      i=0
      
      #to see what i have in my folder
      print os.listdir("C:/Users/muhammedcan/Desktop/1/")
      
      df= pd.read_excel("deneme.xls", sheetname= "sayfa4")
      df1= df.columns[1]
      
      listSepalWidth = df[df1]
      print listSepalWidth
      
      #to make file name and product tag name same
      for i in listSepalWidth:
          i=str(i)+(".jpg")
          print i
      

      如果我的Excel中存在文件,你可以帮我复制到另一个文件吗?

      这是我到目前为止的结果:

      ['4049047000037.jpg', '4049047000044.jpg', '4049047000068.jpg', 
      '4049047000075.jpg', '4049047000082.jpg', '4049047000105.jpg', 
      '4049047118947.jpg', '4049047118954.jpg']
      
      4049047000037.jpg
      4049047000044.jpg
      4049047118954.jpg
      4049047000068.jpg
      4049047000075.jpg
      4049047000082.jpg
      4049047118947.jpg
      4049047000105.jpg
      

      我使用了以下代码,我收到了错误。

      from shutil import copyfile
      
      copyfile("C:\Users\muhammedcan\Desktop\1", "C:\Users\muhammedcan\Desktop\2")
      

      错误是:

          C:\Python27\python.exe "C:/Users/muhammedcan/Desktop/summer 
          courses/programing/MP4/solution/my_work.py"
          Traceback (most recent call last):
        File "C:/Users/muhammedcan/Desktop/summer courses/programing/MP4/solution/my_work.py", line 3, in <module>
          copyfile("C:\Users\muhammedcan\Desktop\1", 
      

      使用退出代码1完成处理

1 个答案:

答案 0 :(得分:1)

以下内容可以满足您的需求:

import os
import glob
import pandas as pd
import shutil

source_folder = r"C:\Users\muhammedcan\Desktop\1"
destination_folder = r"C:\Users\muhammedcan\Desktop\2"

available_filenames = [os.path.basename(fn) for fn in glob.glob(os.path.join(source_folder, '*.jpg'))]
df = pd.read_excel("deneme.xls", sheetname="sayfa4")

for tag_name in df.iloc[:,1]:
    filename = "{}.jpg".format(tag_name)

    if filename in available_filenames:
        print "{} - found".format(filename)
        shutil.copyfile(os.path.join(source_folder, filename), os.path.join(destination_folder, filename))
    else:
        print "{} - not found".format(filename)

如果首先创建.jpg中找到的source_folder个文件名列表。然后它将Excel文件加载到pandas中并迭代第二列。如果在available_filenames列表中找到标记名称,则shutil.copyfile()函数用于将文件从1复制到2。注意os.path.join()用于将文件的各个部分安全地连接在一起。

要使它成为一个让你也可以做'pdf'的功能:

import os
import glob
import pandas as pd
import shutil

source_folder = r"C:\Users\muhammedcan\Desktop\1"
destination_folder = r"C:\Users\muhammedcan\Desktop\2"

df = pd.read_excel("deneme.xls", sheetname="sayfa4")


def copy_files(source_folder, destination_folder, extension):
    available_filenames = [os.path.basename(fn) for fn in glob.glob(os.path.join(source_folder, '*.{}'.format(extension)))]

    for tag_name in df.iloc[:,1]:
        filename = "{}.{}".format(tag_name, extension)

        if filename in available_filenames:
            print "{} - found".format(filename)
            shutil.copyfile(os.path.join(source_folder, filename), os.path.join(destination_folder, filename))
        else:
            print "{} - not found".format(filename)

copy_files(source_folder, destination_folder, 'jpg')            
copy_files(source_folder, destination_folder, 'pdf')                   

这假设两者都使用相同的deneme.xls。如果不是,它可以作为该函数的另一个参数传递。