游戏测试 用 python3 写的检测文件是否改动的脚本运行出现错误,求大神解答

不加班的人 · March 05, 2020 · Last by 陈子昂 replied at March 05, 2020 · 803 hits
# -*- coding:UTF-8 -*-
import os
import os.path
import datetime
import stat
import shutil
import operator


# 文件全路径和对应最后修改时间写入到out.txt文档中;
def add_log(path):
with open('out.txt', 'w') as f:
f.close
for root, dirs, files in os.walk(path):
for name in files:
temp_path = os.path.join(root, name)
file_name = temp_path.replace('F:/build_log/', '')
file_time = os.stat(temp_path).st_mtime
with open('out.txt', 'a') as f:
f.write(','.join(['%s' % file_name, '%s' % file_time]))
f.close()


def if_exit():
# 判断文件out.txt是否存在,不存在则创建
filename = 'out.txt'
if os.path.exists(filename):
message = 'Ok, the "%s" file exists '
else:
message = "Sorry, I cannot find the '%s' file..and I create it."
a = open('out.txt', 'w')
a.close()
print(message % filename)

files_name = 'update'
if os.path.exists(files_name):
message = 'OK, the "%s" file exists.'
else:
message = "Sorry, I cannot find the '%s' file.and I create it. "
os.mkdir('update')
print(message % files_name)


# path 待比较的文件夹路径
# 返回生成的txt(包含更新或者添加的文件路径)的路径
def log_compare(path):
if_exit()
# 获取out.txt文件内容(文件全路径key和最后修改时间value),生成dict
txt = open('out.txt', 'r+').readlines
myDic = {}
for row in txt:
(key, value) = row.split(',')
myDic[key] = value
print(myDic)
# 创建以时间命名的文件和文件夹
setup_filename = str(datetime.datetime.now().strftime('%Y%m%d%H%M%S'))
setup_file_path = '%s%s.txt' % ('F:/Test_log/', setup_filename)
setup_file_dir = '%s%s' % ('F:/Test_log/', setup_file_path)

# 判断key,比较value值是否变化rs/
# 原始需要有一个out.txt文件,才能比较value确定是否有更新
# 运行程序时,重新遍历一遍文件全路径和最后修改时间
for root, dirs, files in os.walk(path):
for name in files:
temp_path = os.path.join(root, name)
file_name = temp_path.replace('F:/build_log/', '')
time = os.stat(temp_path).st_mtime # 获取最后的修改时间
file_time = '%s\n' % time
# %s\n是为了与out.txt里值完全对应
if file_name in myDic:
if operator.eq(myDic[file_time], file_time):
print(
file_name,
file_time,
)
with open(setup_file_path, 'a') as f:
f.write('%s\n' % file_name)
f.close()
else:
print('add', file_name)
with open(setup_file_path, 'a') as f:
f.write('%s\n' % file_name)
f.close()
return (setup_filename, setup_file_dir, setup_file_path)


# src目录中的内容拷贝到dest目录
# 如果dest或者其子目录不存在,先创建
# txt_path为更新日志路径,有更新的文件才拷贝
def copy_directory(src, dest, txt_path):
if not os.path.exists(txt_path):
print("no file update")
return

# 读更新日志,获取更新文件的全路径

txt = open(txt_path, 'r').readlines()
myDic = {}
myDic2 = {}
for row in txt:
myDic[row] = "1"
tempArray = os.path.split(row)
key = tempArray[0]
myDic2[key] = "1"

print("myDic2:", myDic2)
print("dict:", myDic)

# 遍历原始文件夹,得到所有文件的全路径
for root, dirs, files in os.walk(src):
for name in files:
# print "dirs:",dirs
fpath = os.path.join(root, name)
newroot = root
newroot = newroot.replace(src,
dest) # 根据文件绝对路径,创建将要拷贝的路径(相对路径),没有则创建
# print newroot
rel_dir = root.replace('F:/build_log/', '')
if not os.path.exists(newroot) and rel_dir in myDic2:
print("rel_dir:", rel_dir)
print(newroot)
os.makedirs(newroot)
os.chmod(newroot, stat.S_IWRITE)
temp = fpath
temp = temp.replace(src, dest)
rel_path = fpath.replace('F:/build_log/',
'') # 将绝对路径改为相对路径,便于遍历对比,挑出要拷贝的文件
rel_path += '\n'

if rel_path in myDic:
print("real_path:", rel_path)
# os.mkdir(rel_path)
shutil.copy(fpath, temp)
print("copyfile:", fpath)


def main():
path_dir = 'F:/build_log/'

params = log_compare(path_dir)
add_log(path_dir)
copy_directory(path_dir, params[1], params[2])


if __name__ == '__main__':
main()

运行出现错误

最佳回复

粗心 txt = open('out.txt', 'r+').readlines 加括号

共收到 3 条回复 时间 点赞

粗心 txt = open('out.txt', 'r+').readlines 加括号

能运行了

如果是打包后的话,应该时间都变了吧,如果是unity的才需要用原始文件。

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up