我目前正在开发一个Python脚本,它将一个文件从一个目录上传到一个构建到3D打印机的FTP服务器上。上传和FTP的一切都有效,但我有一个相当具体的任务要做的脚本。我想将很多文件转储到起始目录中。所以它就像:
我希望脚本抓取第一个文件并修改名称,这样它只会向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
我使用第二个脚本在按钮上运行这个脚本。它就像一个魅力,从现在起将帮助我更有效地完成我的工作。 谢谢您的帮助。并有一个很好的编码。 最好的祝福, 埃迪=)
答案 0 :(得分:0)
如果我正确地阅读了你的问题,有两个部分需要解决:
对于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".
有关正则表达式的更多资源,您可能会觉得有用: