sudo apt install python3-pip
pip install pandas openpyxl
原来的代码有问题,代码实现更新一下。
运行命令
python3 a_tree_dir_file_excel.py ./nvlink 3 nvlink_tree.xlsx
python3 a_tree_dir_file_excel.py ./zz_nvlink 3 zz_nvlink_tree.xlsx
源代码如下:
# Python3默认使用Unicode编码,可以直接处理中文字符
# 但如果你需要确保编码,可以在文件开头添加编码声明
# -*- coding: utf-8 -*-
import pandas as pd
import os
import sys
def main():
# 参数个数 (包括脚本名本身)
arg_count = len(sys.argv)
# 参数内容列表
args = sys.argv
print(f"参数个数: {arg_count}")
print(f"参数列表: {args}")
if 4 != arg_count:
print(f"错误: {e}", file=sys.stderr)
sys.exit(1)
print(f"args[0]={args[0]} args[1]={args[1]} args[2]={args[2]}")
cmdTree1 = "tree --noreport -n -L "
cmdTree = cmdTree1 + args[2] + " " + args[1]
outputfile = args[3]
print(f"outputfile={outputfile}")
# 生成 tree 文本并解析
#tree_text = os.popen('tree --noreport -n -L 4 /home/gaozenghua/ACClink_Device/kernel/nvlink').read()
tree_text = os.popen(cmdTree).read()
#lines = [line.strip() for line in tree_text.split('\n') if line.strip()]
lines = []
for line in tree_text.split('\n'):
stripped_line = line.strip()
if stripped_line: # 检查是否非空
lines.append(line)
# 转换为 DataFrame
data = []
shitname = ["序号1", "根文件", "第二级目录文件", "第三级目录文件",
"第四级目录文件", "第五级目录文件", "第六级目录文件",
"第七级目录文件", "第八级目录文件", "第九级目录文件", "第十级目录文件"]
baseStr = ["├── ", "└── ", "│ ├── ", "│ └── ", "│ │ ├── ", "│ │ └── ", "│ │ │ ├── ", "│ │ │ └── "]
firstDir =["├── ", "└── ", "│"]
len1 = [len(s) for s in baseStr]
#print(len1)
indexDirFile = 0
count = 0
countMax = 0
for line in lines:
count = line.count('│')
if count > countMax:
countMax = count
#print(f"countMax={countMax} count={count}")
def contains_any_substring(main_string, substrings_list):
"""检查字符串是否包含列表中的任意子字符串"""
if any(substring in main_string for substring in substrings_list):
return 0 # 包含
else:
return -1 # 不包含
def append_str_list():
tmp = (countMax + 1) * 2
for i in range(tmp):
listArray.append(baseStr[i])
return tmp
# 初始化一个空列表
listArray = []
listCount = append_str_list()
#print(f"countMax={countMax} listCount={listCount}")
'''
for str in listArray:
print(f"listArray str={str}")
'''
runCnt = 0
nameNULL = ""
s = "Hello, 世界" # 包含英文和中文
length = len(s) # 计算字符数(不是字节数)
#print(length) # 输出:8(H,e,l,l,o,, ,世,界)
flagString1 = "│ "
flagString2 = "├── "
flagString3 = "└── "
flagString4 = " "
flagStrSize = 4
flagStrSize = len(flagString1)
#print(f" flagString1={flagString1} flagStrSize={flagStrSize}=len(flagString1)")
flagStrSize = len(flagString2)
##print(f" flagString2={flagString2} flagStrSize={flagStrSize}=len(flagString2)")
flagStrSize = len(flagString3)
#print(f" flagString3={flagString3} flagStrSize={flagStrSize}=len(flagString3)")
##print("\n\n")
for line in lines:
usefullBufIndex = 0
if line.startswith((flagString1, flagString2, flagString3, flagString4)):
#print(f"-1- listCount={listCount} line={line}")
indexDirFile = indexDirFile + 1
flagStrSize = line.find(flagString2)
if -1 == flagStrSize:
flagStrSize = line.find(flagString3)
else:
usefullBufIndex = len(flagString2)
if -1 == flagStrSize:
print(f"************Unusefull listCount={listCount} line=({line})")
else:
usefullBufIndex = len(flagString3)
usefullBufIndex = usefullBufIndex + flagStrSize
lineIndex = line[usefullBufIndex:]
if (usefullBufIndex / len(flagString2)) > (usefullBufIndex / len(flagString3)):
bufferIndex = (int)(usefullBufIndex / len(flagString2))
else:
bufferIndex = (int)(usefullBufIndex / len(flagString3))
#print(f"usefull indexDirFile={indexDirFile} line=\"{line}\" lineIndex=\"{lineIndex}\" bufferIndex={bufferIndex} flagStrSize={flagStrSize} usefullBufIndex={usefullBufIndex}")
if 1 == bufferIndex:
data.append({shitname[0]: indexDirFile, shitname[1]: lineIndex})
elif 2 == bufferIndex:
data.append({shitname[0]: indexDirFile, shitname[1]: nameNULL, shitname[2]: lineIndex})
elif 3 == bufferIndex:
data.append({shitname[0]: indexDirFile, shitname[1]: nameNULL, shitname[2]: nameNULL, shitname[3]: lineIndex})
elif 4 == bufferIndex:
data.append({shitname[0]: indexDirFile, shitname[1]: nameNULL, shitname[2]: nameNULL, shitname[3]: nameNULL, shitname[4]: lineIndex})
else:
print(f"Unusefull listCount={listCount} line={line}")
df = pd.DataFrame(data)
# 保存为 Excel
df.to_excel(outputfile, index=False, engine='openpyxl')
if __name__ == "__main__":
main()
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。