执行脚本时没有任何反应?
While executing script nothing happens?
我的目标是创建一个 python 的脚本,它将 format/modify xml 文件。
文件路径和文件名将在命令行中作为参数给出。
下面是我的代码:
import lxml.etree as etree
from argparse import ArgumentParser
import sys
import os
def main():
parser = ArgumentParser()
parser.add_argument('-p', '--path', help="path to file's directory", required=True)
parser.add_argument('-f', '--file', help="file name", required=True)
args = parser.parse_args()
root_dir = sys.argv[1]
file_name = sys.argv[2]
path = sys.argv[1] + sys.argv[2]
for dirpath, dirnames, files in os.walk(root_dir):
for file in files:
if file == file_name:
print(os.path.join(dirpath, file_name))
with open(path, 'r', encoding="utf8") as myfile:
try:
print("DONE")
parser = etree.XMLParser(remove_blank_text = True)
tree = etree.parse(path, parser)
tree.write(path, pretty_print = True)
except IOError:
print("IO Exception Occured")
if __name__ == "__main__":
main()
当我从 cmd 运行 它时 - 我有 0 个错误,但文件未格式化,即使我给出了不存在的文件名 - 仍然没有错误。所以当我从 cmd 运行 它时 - 没有任何反应。
当我尝试在 Visual Studio 中调试它时,出现需要提供 2 个参数的错误。
谁能告诉我如何修复我的代码,我不知道我哪里有错误代码?
你是 misusing/combining/confusing sys.argv
和 ArgumentParser
。这段代码实际上给了你意想不到的结果,因为你的变量不是你想的那样!
root_dir = sys.argv[1]
file_name = sys.argv[2]
# Add some print statements to examine these variables:
print(f'root_dir:{root_dir}')
print(f'file_name:{file_name}')
看:
改为这样做:
root_dir = args.path
file_name = args.file
这是我用来测试的代码:
from argparse import ArgumentParser
import sys
def main():
parser = ArgumentParser()
parser.add_argument('-p', '--path', help="path to file's directory", required=True)
parser.add_argument('-f', '--file', help="file name", required=True)
args = parser.parse_args()
root_dir = args.path
file_name = args.file
print(f'root_dir:{root_dir}')
print(f'file_name:{file_name}')
if __name__ == "__main__":
main()
你在混合两种东西!
方法一
使用 XmlFormat.py -p c:\User\Desktop\test\ -f test.xml
启动
import lxml.etree as etree
from argparse import ArgumentParser
import sys
import os
def main():
parser = ArgumentParser()
parser.add_argument('-p', '--path', help="path to file's directory", required=True)
parser.add_argument('-f', '--file', help="file name", required=True)
args = parser.parse_args()
root_dir = args.path
file_name = args.file
path = root_dir + file_name
for dirpath, dirnames, files in os.walk(root_dir):
for file in files:
if file == file_name:
print(os.path.join(dirpath, file_name))
with open(path, 'r', encoding="utf8") as myfile:
try:
print("DONE")
parser = etree.XMLParser(remove_blank_text = True)
tree = etree.parse(path, parser)
tree.write(path, pretty_print = True)
except IOError:
print("IO Exception Occured")
if __name__ == "__main__":
main()
方法二
使用 XmlFormat.py c:\User\Desktop\test\ test.xml
启动(不要使用 -p 和 -f)
import lxml.etree as etree
from argparse import ArgumentParser
import sys
import os
def main():
root_dir = sys.argv[1]
file_name = sys.argv[2]
path = root_dir + file_name
for dirpath, dirnames, files in os.walk(root_dir):
for file in files:
if file == file_name:
print(os.path.join(dirpath, file_name))
with open(path, 'r', encoding="utf8") as myfile:
try:
print("DONE")
parser = etree.XMLParser(remove_blank_text = True)
tree = etree.parse(path, parser)
tree.write(path, pretty_print = True)
except IOError:
print("IO Exception Occured")
if __name__ == "__main__":
main()
我的目标是创建一个 python 的脚本,它将 format/modify xml 文件。 文件路径和文件名将在命令行中作为参数给出。
下面是我的代码:
import lxml.etree as etree
from argparse import ArgumentParser
import sys
import os
def main():
parser = ArgumentParser()
parser.add_argument('-p', '--path', help="path to file's directory", required=True)
parser.add_argument('-f', '--file', help="file name", required=True)
args = parser.parse_args()
root_dir = sys.argv[1]
file_name = sys.argv[2]
path = sys.argv[1] + sys.argv[2]
for dirpath, dirnames, files in os.walk(root_dir):
for file in files:
if file == file_name:
print(os.path.join(dirpath, file_name))
with open(path, 'r', encoding="utf8") as myfile:
try:
print("DONE")
parser = etree.XMLParser(remove_blank_text = True)
tree = etree.parse(path, parser)
tree.write(path, pretty_print = True)
except IOError:
print("IO Exception Occured")
if __name__ == "__main__":
main()
当我从 cmd 运行 它时 - 我有 0 个错误,但文件未格式化,即使我给出了不存在的文件名 - 仍然没有错误。所以当我从 cmd 运行 它时 - 没有任何反应。
当我尝试在 Visual Studio 中调试它时,出现需要提供 2 个参数的错误。 谁能告诉我如何修复我的代码,我不知道我哪里有错误代码?
你是 misusing/combining/confusing sys.argv
和 ArgumentParser
。这段代码实际上给了你意想不到的结果,因为你的变量不是你想的那样!
root_dir = sys.argv[1]
file_name = sys.argv[2]
# Add some print statements to examine these variables:
print(f'root_dir:{root_dir}')
print(f'file_name:{file_name}')
看:
改为这样做:
root_dir = args.path
file_name = args.file
这是我用来测试的代码:
from argparse import ArgumentParser
import sys
def main():
parser = ArgumentParser()
parser.add_argument('-p', '--path', help="path to file's directory", required=True)
parser.add_argument('-f', '--file', help="file name", required=True)
args = parser.parse_args()
root_dir = args.path
file_name = args.file
print(f'root_dir:{root_dir}')
print(f'file_name:{file_name}')
if __name__ == "__main__":
main()
你在混合两种东西!
方法一
使用 XmlFormat.py -p c:\User\Desktop\test\ -f test.xml
import lxml.etree as etree
from argparse import ArgumentParser
import sys
import os
def main():
parser = ArgumentParser()
parser.add_argument('-p', '--path', help="path to file's directory", required=True)
parser.add_argument('-f', '--file', help="file name", required=True)
args = parser.parse_args()
root_dir = args.path
file_name = args.file
path = root_dir + file_name
for dirpath, dirnames, files in os.walk(root_dir):
for file in files:
if file == file_name:
print(os.path.join(dirpath, file_name))
with open(path, 'r', encoding="utf8") as myfile:
try:
print("DONE")
parser = etree.XMLParser(remove_blank_text = True)
tree = etree.parse(path, parser)
tree.write(path, pretty_print = True)
except IOError:
print("IO Exception Occured")
if __name__ == "__main__":
main()
方法二
使用 XmlFormat.py c:\User\Desktop\test\ test.xml
启动(不要使用 -p 和 -f)
import lxml.etree as etree
from argparse import ArgumentParser
import sys
import os
def main():
root_dir = sys.argv[1]
file_name = sys.argv[2]
path = root_dir + file_name
for dirpath, dirnames, files in os.walk(root_dir):
for file in files:
if file == file_name:
print(os.path.join(dirpath, file_name))
with open(path, 'r', encoding="utf8") as myfile:
try:
print("DONE")
parser = etree.XMLParser(remove_blank_text = True)
tree = etree.parse(path, parser)
tree.write(path, pretty_print = True)
except IOError:
print("IO Exception Occured")
if __name__ == "__main__":
main()