[Python] 纯文本查看 复制代码
import pyperclip
def modified_width(char):
global width
char_width = {'%': 10, '^': 10, '&': 10, '*': 6, '(': 6, ')': 6, '_': 10, '-': 10, '+': 10, '=': 10, '{': 6,
'[': 6, '}': 6, ']': 6, '|': 2, '\\': 10, ';': 2, ':': 2, '"': 6, "'": 6, '<': 8, '>': 8, ',': 2,
'.': 2, '?': 10, '/': 10, 't': 6, 'i': 2, 'I': 6, 'f': 8, 'k': 8, 'l': 4, ' ': 6, ' ': 16, '”': 6,
'“': 6}
if char in char_width: # 半角符号 部分英文 空格
width += char_width[char]
elif 0x20 <= ord(char) <= 0x7E: # 部分英文
width += 10
elif 0x4e00 <= ord(char) <= 0x9fff: # 汉字
width += (15 + 1)
elif 0x3000 <= ord(char) <= 0x303F: # 中文符号
if char == '…':
width += 14
else:
width += (15 + 1)
width += 2
def arch_pages(_page): # 归档page
global page
page = r'\\n'.join(_page)
page = f"'{{\"text\":\"{page}\"}}'"
pages.append(page)
page = []
# 书拆分成句子
with open("book.txt", "r", encoding="UTF-8") as f: # 需要转换的文档book.txt
char_list = []
line_list = []
while True:
para = f.readline()
if para:
# 处理上一段落末尾
if char_list:
line_list.append(''.join(char_list).strip('\n')) # 归档这一行
width = 0
if char_list:
modified_width(char)
char_list = []
for char in para:
modified_width(char) # 长度修正
if width > 228:
line_list.append(''.join(char_list).strip('\n')) # 归档这一行
width = 0
modified_width(char)
char_list = [char]
else:
# 补充行列表
char_list.append(char)
if not para:
# 处理文章末尾
if char_list:
line_list.append(''.join(char_list).strip('\n')) # 归档这一行
width = 0
modified_width(char)
break
# 句子打包成页
i = 0
page = []
pages = []
for line in line_list:
i += 1
if i <= 14:
pass
else:
i = 1
arch_pages(page)
page.append(line)
if page: # 处理文章末页
arch_pages(page)
pages = ','.join(pages)
# 书籍信息
title = '书名'
author = 'cbbl'
display = '{Lore:["书籍介绍"]}'
version = '1.20' # 修改为需要导入的版本
if int(version.replace('1.', '')) <= 12:
number = ' 1 0 '
else:
number = ''
if int(version.replace('1.', '')) >= 15:
pass
else:
pages = pages.replace('"text"', r'\"text\"')
if int(version.replace('1.', '')) < 8:
print('该版本give指令仅支持空白成书')
else:
command = f'give @p written_book{number}{{pages:[{pages}],title:{title},author:{author},display:{display}}}'
command.replace(r'\\n', '')
pyperclip.copy(command)
print('指令已复制到剪贴板')