- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python 写一个文件分发小程序由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1、概述 。
该小程序实现从源端到目标端的文件一键拷贝,源端和目标段都在一台电脑上面,只是目录不同而已 。
2、参数文件说明 。
1. settings.txt的说明 a. 通过配置settings.txt,填源端和目标端路径,如果用反斜杠结尾表示填的是文件夹,如果不是反斜杠结尾则代表填的是文件 b. 如果是按日期自动生成的文件夹,则用{YYYYMMMDD}或{MMDD}等替代 c. 文件支持*匹配任意名字 d. 在no_create_ok_file组中,表示不生成ok标识,在create_ok_file组中表示生成ok标识 e. 如果settings.txt填写不正确,运行这个小程序就会生成一个error.log,但是不影响后面的拷贝 。
举例 D:\test3\{YYYYMMDD}\ = E:\test4\{YYYYMMDD}\,如果在执行程序的时候不填日期,直接回车,这个{YYYYMMDD}就自动替换为当天的日期,如果填了日期(如20191115),那{YYYYMMDD}就自动替换为20191115 D:\test1\fa* = E:\test2\,这个就表示把D:\test1目录下的以fa开头的文件全部拷贝到E:\test2中去 。
2. okfile.txt的说明 okfile.txt填的源端的ok文件,有些系统在生成文件的时候,会生成一个ok文件,表示系统文件已经生成完成。okfile.txt就是来校验这些文件是否存在,如果不存在,那么运行这个小程序的时候就会生成一个warn.log,但是不影响实际的拷贝.
3、程序说明 。
由于业务人员不懂python,也没有装开发环境,因此通过将python文件打包成一个exe的形式,方便他们操作.
1
2
|
pip isntall PyInstaller
# 安装PyInstaller包
pyinstaller -F filetran.py --icon=rocket.ico
# 将.py文件和.ico文件放在一起,在dist目录下面生成exe文件
|
由于我的py文件需要读这两个配置文件,因此还需要将.exe文件和这两个配置文件放在同一个目录下面,就可以到任意一台windows下面执行了 。
4、附上代码 filetran.py 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
# autor: yangbao
# date: 2019-10-16
import
os
import
time
import
datetime
import
re
import
shutil
import
configparser
def
variable_replace(variable):
"""路径替换"""
global
customer_input
local_customer_input
=
customer_input
if
local_customer_input:
curr_year
=
local_customer_input[
0
:
4
]
curr_month
=
local_customer_input[
4
:
6
]
curr_day
=
local_customer_input[
6
:
8
]
else
:
curr_year
=
str
(time.strftime(
'%Y'
))
curr_month
=
str
(time.strftime(
'%m'
))
curr_day
=
str
(time.strftime(
'%d'
))
if
re.search(
'{YYYYMMDD}'
, variable):
variable
=
variable.replace(
'{YYYYMMDD}'
, curr_year
+
curr_month
+
curr_day)
if
re.search(
'{YYYYMM}'
, variable):
variable
=
variable.replace(
'{YYYYMM}'
, curr_year
+
curr_month)
if
re.search(
'{MMDD}'
, variable):
variable
=
variable.replace(
'{MMDD}'
, curr_month
+
curr_day)
if
re.search(
'{YYYY}'
, variable):
variable
=
variable.replace(
'{YYYY}'
, curr_year)
if
re.search(
'{MM}'
, variable):
variable
=
variable.replace(
'{MM}'
, curr_month)
if
re.search(
'{DD}'
, variable):
variable
=
variable.replace(
'{DD}'
, curr_day)
return
variable
def
source_to_target():
"""读取settings.txt文件,将源端和目标端映射关系对上"""
source_to_target_dict
=
{}
with
open
(
'settings.txt'
,
'r'
, encoding
=
'utf-8-sig'
) as f:
for
line
in
f.readlines():
# 排除注释和空行和格式不正确的
if
not
line.startswith(
'#'
)
and
line.strip() !
=
'
' and re.search('
=
', line):
source
=
line.split(
'='
)[
0
].strip()
target
=
line.split(
'='
)[
1
].strip()
source_to_target_dict[source]
=
target
return
source_to_target_dict
def
create_ok_file(source):
"""读取配置文件"""
cf
=
configparser.ConfigParser(delimiters
=
(
'='
))
cf.read(
"settings.txt"
, encoding
=
'utf-8-sig'
)
options
=
cf.options(
"create_ok_file"
)
for
i
in
options:
if
source.lower()
=
=
i.lower().strip():
return
True
return
False
def
filecopy():
"""文件拷贝"""
# 得到映射表
source_to_target_dict
=
source_to_target()
# 读取每一个目标路径
for
ori_source, ori_target
in
source_to_target_dict.items():
source
=
variable_replace(ori_source)
target
=
variable_replace(ori_target)
# 如果源端填的是文件夹
if
source.endswith(os.sep):
if
os.path.exists(source):
file_list
=
os.listdir(source)
for
filename
in
file_list:
# 如果目标路径不存在,就创建
if
not
os.path.exists(target):
os.makedirs(target)
source_file
=
source
+
filename
target_file
=
target
+
filename
print
(
'['
, time.strftime(
'%Y-%m-%d %H:%M:%S'
),
'] '
, source_file,
' ----> '
, target_file,
' 开始拷贝'
, sep
=
'')
try
:
shutil.copyfile(source_file, target_file)
if
create_ok_file(ori_source):
ok_file
=
target_file
+
'.ok'
fp
=
open
(ok_file,
'w'
)
fp.close()
except
Exception as e:
with
open
(error_log_name,
'a+'
, encoding
=
'utf-8-sig'
) as f:
f.write(
str
(e))
f.write(
'\n'
)
break
# print('[', time.strftime('%Y-%m-%d %H:%M:%S'), '] ', source_file, ' ----> ', target_file, ' 拷贝完成', sep='')
# 如果源端填的是文件
else
:
source_dir
=
source[
0
:source.rfind(os.sep)
+
1
]
# 得到该文件所在的文件夹
file_name_pattern
=
source[source.rfind(os.sep)
+
1
:]
# 得到该文件的文件样式
if
os.path.exists(source_dir):
file_list
=
os.listdir(source_dir)
for
filename
in
file_list:
# 只有匹配上的才拷贝
if
re.match(file_name_pattern, filename):
# 如果目标路径不存在,就创建
if
not
os.path.exists(target):
os.makedirs(target)
source_file
=
source_dir
+
filename
target_file
=
target
+
filename
print
(
'['
, time.strftime(
'%Y-%m-%d %H:%M:%S'
),
'] '
, source_file,
' ----> '
, target_file,
' 开始拷贝'
, sep
=
'')
try
:
shutil.copyfile(source_file, target_file)
if
create_ok_file(ori_source):
ok_file
=
target_file
+
'.ok'
fp
=
open
(ok_file,
'w'
)
fp.close()
except
Exception as e:
with
open
(error_log_name,
'a+'
, encoding
=
'utf-8-sig'
) as f:
f.write(
str
(e))
f.write(
'\n'
)
break
# print('[', time.strftime('%Y-%m-%d %H:%M:%S'), '] ', source_file, ' ----> ', target_file, ' 拷贝完成', sep='')
def
warnlog():
"""警告日志"""
with
open
(
'okfile.txt'
,
'r'
, encoding
=
'utf-8'
) as f:
for
line
in
f.readlines():
# 排除注释和空行和格式不正确的
if
not
line.startswith(
'#'
)
and
line.strip() !
=
'':
okfile
=
variable_replace(line.strip())
if
not
os.path.isfile(okfile):
with
open
(warn_log_name,
'a+'
, encoding
=
'utf-8-sig'
) as t:
t.write(okfile
+
' 该文件不存在!'
)
t.write(
'\n'
)
if
__name__
=
=
'__main__'
:
# 主程序
customer_input
=
input
(
'请输入需要拷贝的8位指定日期,如20191114,如果不输入,默认拷贝当天\n'
)
# 如果没输入,或者输入格式正确,就拷贝
if
re.match(
'\d{8}'
,customer_input)
or
not
customer_input:
begin_time
=
datetime.datetime.now()
error_log_name
=
'error_'
+
str
(time.strftime(
'%Y%m%d_%H%M%S'
))
+
'_.log'
warn_log_name
=
'warn_'
+
str
(time.strftime(
'%Y%m%d_%H%M%S'
))
+
'_.log'
print
(
'['
, time.strftime(
'%Y-%m-%d %H:%M:%S'
),
'] '
,
'文件开始拷贝...'
, sep
=
'')
print
(
'-'
*
50
)
filecopy()
warnlog()
end_time
=
datetime.datetime.now()
cost_time
=
(end_time
-
begin_time).seconds
print
(
'-'
*
50
)
print
(
'['
, time.strftime(
'%Y-%m-%d %H:%M:%S'
),
'] '
,
'文件拷贝结束,总耗时'
, cost_time,
'秒'
, sep
=
'')
# 如果输入格式不正确
elif
not
re.match(
'\d{8}'
, customer_input):
print
(
'请输入正确的格式'
)
input
(
'按回车键退出'
)
|
settings.txt 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# 拷贝路径设置
# 源端路径不存在就不复制,目标端路径不存在会自动创建目录
# 说明事项:
# 1. 格式为源端路径 = 目标路径
# 2. 文件夹后面以反斜杠结束\
# 3. 如果是变量,则以大括号阔起来,如今天是20191012, {YYYYMMDD}会替换为20191012,则使用{MMDD}替换为1012,{DD}替换为12
# 4. YYYY MM DD都填大写
# 以下是示例
# 拷贝整个文件夹 --> P:\信息技术部\YangBao\oa\ = E:\test2\
# 拷贝指定名称,*表示匹配任意字符 --> D:\test3\{YYYYMMDD}\ab* = E:\test4\{YYYYMMDD}\
[no_create_ok_file]
# 将不需要生成ok标识的路径或文件填在这下面
D:\test3\{YYYYMMDD}\
=
E:\test4\{YYYYMMDD}\
[create_ok_file]
# 将需要生成ok标识的路径或文件填在这下面
D:\test1\
=
E:\test2\
|
okfile.txt 。
1
2
3
4
5
|
# ok文件设置设置
# 以下是示例
# {YYYYMMDD}会替换成指定日期,D:\test3\{YYYYMMDD}\ab.txt
# D:\test3\{YYYYMMDD}\sdfg
|
filetran.exe 。
https://pan.baidu.com/s/1vxO6UycDtz5nN4DpmjLN5w 提取码:bgdu 。
注意不管是使用python去执行filetran.py,还是单击filetran.exe,都需要跟settings.txt和okfile.txt放在一起,否则程序会报错.
以上就是python 写一个文件分发小程序的详细内容,更多关于python 文件分发的资料请关注我其它相关文章! 。
原文链接:https://www.cnblogs.com/ddzj01/p/11867657.html 。
最后此篇关于python 写一个文件分发小程序的文章就讲到这里了,如果你想了解更多关于python 写一个文件分发小程序的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我目前正在为一组非常异构的计算机开发 OpenCL 应用程序(具体使用 JavaCL)。为了最大限度地提高性能,如果 GPU 可用,我想使用它,否则我想回退到 CPU 并使用 SIMD 指令。我的计划
我尝试使用以下链接为我的示例应用程序创建 OTA: http://developer.apple.com/library/ios/#featuredarticles/FA_Wireless_Enter
使用 gradle 发行版插件创建发行版时是否可以添加空目录(例如“日志”)? 我看到了this JIRA ,描述完全相同的事情。仍然开放https://issues.gradle.org/brows
我在网上看到,如果我们想将应用程序分发到应用程序商店,我们需要一个单独的分发配置文件。我知道 StackOverflow 上已经有针对此错误的答案,但我认为我的答案与我的分发配置文件有关。 所以现在我
我想为 existing bundle id 创建新的 IOS Provisioning profile 但它给我一个错误。请帮忙 我创建同名的IOS 但管理员做了一些事情并使其无效。现在他为我创建了
要么我疯了,要么没有人喜欢/喜欢这个功能,但很久以前我曾经在 sourceforge 系统中使用 subversion。我有能力为完成的提交创建完整的文件补丁。 无论如何,我无法弄清楚如何在 git
以不需要客户手动安装 Ruby 和所需 Gem 的方式向客户分发简单的命令行 Ruby 应用程序的最佳方式是什么? 根据我的理解,这个任务归结为几行 SH/BAT 代码,这些代码执行 Ruby/Gem
我有一个依赖于多个库的 Java 项目,这些库作为 JAR 文件分发。当我构建我的项目时,我最终得到了 myProject.jar 和一个 lib 文件夹,其中包含我使用的每个库的 JAR 文件。 为
编辑:更新了问题,因为我很困惑 .dist-id与 .id ; 我正在尝试卸载 dist,但是当我通过 Distribution 时至 .uninstall看起来它的计算方式不同 .dist-id和
我正在考虑移动一个当前嵌入 Python 解释器的程序以使用 Lua。使用 Python 相当容易使用 modulefinder , compileall , 和 zipfile制作一个包含所有使用的
我的老板想要为特定客户分发该应用程序,该客户的员 worker 数约为 500 人。该应用程序使用 Web 服务和设备的 UDID 来限制其他用户访问该软件。我们不是一个可以注册企业程序的大公司,尤其
我正在使用临时分发来运行 Beta 测试程序,并且在分发应用程序更新时遇到了一些问题。我能够通过临时分发在设备上获取应用程序更新的唯一方法是先从设备中删除应用程序,然后安装更新。这为 Beta 测试人
我的公司最近开始为各种客户开发定制 iPhone 应用程序。我们遇到的挑战之一是如何将这些应用程序提供给客户,以便他们可以在开发过程中对其进行审查。 理想情况下,只需向他们发送应用程序文件并让他们将其
我正在使用 SDWebImage 开源项目来异步加载图像。我可以为模拟器以及我的本地设备构建和运行。但是,当我尝试构建分发(即存档)时,编译器似乎不理解头文件是什么: 导入“UIImageView+W
我的应用程序依赖于 DBGHELP.DLL 函数,尤其是有关目标进程加载的 DLL 的信息。然而,很多时候它在低于 Vista 的 Windows 版本上失败(你知道 XP 仍然存在!)。环顾四周,发
tl;博士 大约一周前,我为我的第一个重要的 Haskell 项目发布了 0.1.0.0 包。我希望可执行文件易于安装和升级,即使对于非 Haskellers 也是如此。在 the README 中,
我刚刚完成 Erlang 实践截屏视频(代码 here ),并且有一些关于分发的问题。 这是整体架构: 以下是监督树的样子: 阅读Distributed Applications让我相信主要动机之一是
我是 iPhone 世界的新手。 我开发了一个应用程序,我想将其发送到特定 wi-fi 接入点附近的所有 iphone。 (它适用于购物中心) 据我所知,由于我在这方面的知识有限,我无法通过我的网络服
我使用 Netbeans 创建了一个 Java 控制台应用程序。在 Netbeans dist 目录中,我有该项目的类文件。现在我需要将可执行文件提供给其他人谁将在另一台电脑上运行它们。 我应该发送哪
我正在考虑使用 IronPython 开发一个小型应用程序,但是我想将我的应用程序分发给非技术人员,因此理想情况下我希望能够为他们提供我的应用程序的标准快捷方式以及他们需要的说明首先安装 IronPy
我是一名优秀的程序员,十分优秀!