使用python更改文件名,同时使用一些旧名称

时间:2016-11-03 11:15:50

标签: python raspberry-pi

我目前正在开发一个Python脚本,它将一个文件从一个目录上传到一个构建到3D打印机的FTP服务器上。上传和FTP的一切都有效,但我有一个相当具体的任务要做的脚本。我想将很多文件转储到起始目录中。所以它就像:

  1. 1474lapfab.tgz
  2. 1475lapfab.tgz
  3. ... lapfab.tgz
  4. ..........
  5. 我希望脚本抓取第一个文件并修改名称,这样它只会向ftp服务器发送lapfab.tgz(打印机作出的文件名为lapfab.tgz,因此必须是此名称)。但这是具体的部分。我想要一个新的变量,它在开头保存数字,所以我可以显示打印机正在处理的当前项目数。

    我的代码到目前为止

    # -*- coding: cp1252 -*-
    #geschrieben in Python 2.7.1
    #Drucker Rechts
    import ftplib
    import os
    
    meinftp = ftplib.FTP("192.168.178.178")
    meinftp.login("anonymous")
    
    directory = '/data/todo/'                               #Ftp Main Directory
    meinftp.cwd(directory)                                  #Login to right ftp directory
    directory_local='/home/pi/testprogramme/python/'        #Local upload directory
    filename = 'lapfab.tgz'
    
    print "Open file"
    print
    file = open(directory_local+filename, 'rb')             #Open file in Binary
    
    print "Upload File"
    
    meinftp.storbinary('Stor '+filename, file)              #File Transfer
    
    print
    print "Upload Complete"
    print
    print 'The local File ' + filename +' will close.'
    
    file.close()
    
    print
    print meinftp.quit()                                    #Kill Conection
    print
    print 'FTP-Connection cut.'
    
    os.remove('lapfab')                                     #Deleting the main File from server
    
    print
    print  "Deleting Main File from Server"
    

    如果有人可以从这里开始我的正确轨道,那么我的任务就完成了,那就太棒了!

    来自德国的问候和英语不好的人。

    最诚挚的问候Eddie =)

    编辑:

    我工作,如果你想做这样的事情,请使用以下代码:

    #!/usr/bin/python
    # -*- coding: cp1252 -*-
    #geschrieben in Python 2.7.1
    #Drucker Rechts
    import ftplib, os, re, fnmatch
    
    meinftp = ftplib.FTP("192.168.178.178")
    meinftp.login("anonymous")
    
    directory = '/data/todo/'                               #Ftp Main Directory
    meinftp.cwd(directory)                                  #Login to right ftp directory
    directory_local='/home/pi/testprogramme/python/'        #Local upload directory
    filename = 'lapfab.tgz'
    
    # Capture the matching files.
    file_pattern = "*%s" % filename
    matches = sorted([local_filename for local_filename in os.listdir(directory_local) \
    if fnmatch.fnmatch(local_filename, file_pattern)])
    
    if len(matches) < 0:
        # Don ^ ^ t process anything, no files
        exit()
    
    # Extract the variable
    regex = r"([0-9]+)%s" % filename
    match = re.search(regex, matches[0])
    
    # Do something with the file.
    print("Uploading job %s." % match.group(1))
    full_path = os.path.join(directory_local,matches[0])
    
    # Upload the file etc here.
    
    
    
    
    
    print "Open file"
    print
    file = open(full_path, 'rb')            #Open file in Binary
    
    print "Upload File"
    
    meinftp.storbinary('Stor '+filename, file)              #File Transfer
    
    print
    print "Upload Complete"
    print
    print 'The local File ' + filename +' will close.'
    
    file.close()
    
    print
    print meinftp.quit()                                    #Kill Conection
    print
    print 'FTP-Connection cut.'
    
    os.remove(full_path)                                    #Deleting the main File from server
    
    print
    print  "Deleting Main File from Server"
    print
    print "The File" +full_path+ " was transfered to the Right Printer"
    print
    print
    print "End!"
    print
    

    我使用第二个脚本在按钮上运行这个脚本。它就像一个魅力,从现在起将帮助我更有效地完成我的工作。 谢谢您的帮助。并有一个很好的编码。 最好的祝福, 埃迪=)

1 个答案:

答案 0 :(得分:0)

如果我正确地阅读了你的问题,有两个部分需要解决:

  1. 如何从本地目录上传多个文件。
  2. 如何从文件名中提取变量名称。
  3. 对于1,您可以使用os.listdir()来获取本地目录中的文件列表。对于2,您可以使用正则表达式从文件名中捕获变量。在括号中使用正则表达式捕获组 - ()来捕获变量。正则表达式在re模块中。

    EXECUTE @OLEResult = sp_OAMethod @FS, 'CreateTextFile', @FileID OUT, @FileName, 8 , 1 
    

    如果将两者结合使用,则可以迭代本地目录并捕获变量名称:

    import re
    
    regex = r"([0-9]+)%s" % filename # This will give you r"([0-9]+)lapfab.tgz"
    match = re.search(regex, "1474lapfab.tgz")
    print match.group(0) # This will print out "1474lapfab.tgz".
    print match.group(1) # This will print out "1474".
    

    有关正则表达式的更多资源,您可能会觉得有用:

    • This page更好地概述了在python中使用正则表达式
    • regex101.com对于在程序之外玩和调试regex以查看它们是否匹配非常有用。