```py
def get_string_width(msg):
"""
# 获取中英文字符串宽度
"""
width = len(msg)
for word in msg:
if (word >='\u4e00' and word <= '\u9fa5') or word in [';',':',',','(',')','!','?','——','……','、','》','《']:
width+=1
return width
```
## 3. 获取每一列的最大宽度
* 为了在分隔符‘|’末尾有空格,需要在最大宽度上加1
```
def get_cnchar_col_max_len(_rows, max_column):
"""
# 获取每一列的最大宽度
# 中英文混排,宽度不一致时的处理
"""
col_max_lens = []
for i in range(max_column):
col_lens = [get_string_width(row) for row in _rows]
max_len = max(col_lens)+1
col_max_lens.append(max_len)
return col_max_lens
```
## 4. 格式化一行中英文字符串
* 调用 format 函数格式化字符串
```
def print_format(msg, width, fill):
"""
# 中英文宽度对齐
# msg: 待对齐的字符串
# width: 该列最大宽度
# fill: 右侧待填充的字符,默认为' '
# align: 默认为左对齐
"""
align = '<'
try:
count = 0
for word in msg:
if (word >='\u4e00' and word <= '\u9fa5') or word in [';',':',',','(',')','!','?','——','……','、','》','《']:
count+=1
if width>=count:
width = width-count
output = '{0:{1}{2}{3}}'.format(msg,fill,align,width)
# print('output', output)
except:
print('Error: print_format eroor')
output = ''
return output
```
## 5. 格式化多行多列字符串表
* 调用 print_format 函数格式化字符串
```
def format_cnchar_equal_len(rows, col_max_lens):
"""
# 含有汉字的情况,将每一列中各行格式化等宽
# rows: 按行存放的字符串列表
# col_max_lens: 各列最大宽度
"""
for i in range(len(rows)):
for j in range(len(col_max_lens)):
rows[j] = print_format(rows[j],col_max_lens[j],' ')
return rows
```
## 6. 格式化 md 表格第二行
* 生成各列最大宽度的'---'
```
def format_style_line(col_max_lens):
"""
# 生成各列最大宽度的连续短划线 '---'
"""
insert_row = []
empty_string = ''
for len in col_max_lens:
insert_row.append(empty_string.ljust(len, "-"))
return insert_row
```
## 7.将整理好的字符串表按 '|' 分隔符存放在 md文件
* 调用Excel中 csv的存放方式
```python
def write_csv( file_name:str, headers:list, rows:list):
"""
# 用 csv 生成 md 文件
"""
try:
with open(file_name, encoding="utf_8_sig", mode="w", newline="\n") as f:
_writer = csv.writer(f, delimiter="|")
for header in headers:
_writer.writerow(header)
_writer.writerows(rows)
except Exception as e:
print("Error: Write_csv exception", e)
```