当前位置:   article > 正文

如何用python进行文字校对,python调整对齐的快捷键_python文本对齐

python文本对齐

大家好,小编来为大家解答以下问题,如何用python进行文字校对,python调整对齐的快捷键,现在让我们一起来看看吧!

使用Python处理Word文件

  • 安装外部模块python-docx
pip install python-docx

1. 从Python看Word文件结构

python-docx模块中,将Word文件结构分成3层:

  • Document:最高层,代表整个Word文件。
  • Paragraph:一个Word文件由许多段落组成,在Python中,整份文件的定义是Document,这些段落的定义就是Paragraph对象江苏副高职称论文期刊要求。在Python中,一个段落代表一个
    Paragraph对象,所有段落以Paragraph对象列表方式存在。
  • Run:Word文件要考虑的有字号、字体样式、色彩等,统称为样式。一个Run对象指的是Paragraph对象中相同样式的连续文字,如果文字发生样式变化,Python将以新的Run对象代表。

2. 读取Word文件内容

  • 读取简单word文件
  1. # author:mlnt
  2. # createdate:2022/8/15
  3. import docx # 导入docx模块
  4. # 1.创建docx对象
  5. document = docx.Document('test.docx')
  6. # 2.获得Paragraph和Run数量
  7. # 使用len()方法获得Paragraph数量
  8. paragraph_count = len(document.paragraphs)
  9. print(f'段落数:{paragraph_count}')
  10. for i in range(0, paragraph_count):
  11. # 获取Paragraph的Run数量
  12. paragraph_run_count = len(document.paragraphs[i].runs) # i为Paragraph编号
  13. print(document.paragraphs[i].text) # 打印Paragraph内容
  14. print(document.paragraphs[i].runs[i].text) # 打印第i段第i个Run内容
  15. def getFile(filename):
  16. """读取文件与适度编辑文件"""
  17. document = docx.Document(filename) # 建立Word文件对象
  18. content = []
  19. for paragraph in document.paragraphs:
  20. print(paragraph.text) # 输出文件所读取的Paragraph内容
  21. content.append(paragraph.text) # 将每一段Paragraph组成列表
  22. return '\n\n'.join(content) # 将列表转成字符串并隔行输出
  23. print(getFile('test.docx'))
  24. # 存储文件
  25. document.save('out_test.docx') # 将文件复制到新文件

test.docx:
在这里插入图片描述

out_test.docx
在这里插入图片描述

  • 读取含表格的word文档内容
  1. # author:mlnt
  2. # createdate:2022/8/15
  3. import docx # 导入docx模块
  4. from docx.document import Document
  5. from docx.oxml import CT_P, CT_Tbl
  6. from docx.table import _Cell, Table, _Row
  7. from docx.text.paragraph import Paragraph
  8. def iter_block_items(parent):
  9. """
  10. 依次遍历文档内容
  11. 按文档顺序生成对父级中每个段落和表子级的引用。
  12. 每个返回值都是表或段落的实例。
  13. 父对象通常是对主文档对象的引用,但也适用于_Cell对象,它本身可以包含段落和表格。
  14. :param parent:
  15. :return:
  16. """
  17. # 判断传入的是否为word文档对象,是则获取文档内容的全部子对象
  18. if isinstance(parent, Document):
  19. parent_elm = parent.element.body
  20. # 判断传入的是否为单元格,是则获取单元格内全部子对象
  21. elif isinstance(parent, _Cell):
  22. parent_elm = parent.tc
  23. # 判断是否为表格行
  24. elif isinstance(parent, _Row):
  25. parent_elm = parent.tr
  26. else:
  27. raise ValueError("something's not right")
  28. # 遍历全部子对象
  29. for child in parent_elm.iterchildren():
  30. # 判断是否为段落,是则返回段落对象
  31. if isinstance(child, CT_P):
  32. yield Paragraph(child, parent)
  33. # 判断是否为表格,是则返回表格对象
  34. if isinstance(child, CT_Tbl):
  35. yield Table(child, parent)
  36. # 1.创建docx对象
  37. document = docx.Document('test.docx')
  38. # 遍历word文档,最后调用函数没有返回值时停止遍历
  39. for block in iter_block_items(document):
  40. # 判断是否为段落
  41. if isinstance(block, Paragraph):
  42. print(block.text)
  43. # 判断是否为表格
  44. elif isinstance(block, Table):
  45. for row in block.rows:
  46. row_data = []
  47. for cell in row.cells:
  48. for paragraph in cell.paragraphs:
  49. row_data.append(paragraph.text)
  50. print("\t".join(row_data))

测试文档:
在这里插入图片描述
读取效果:
在这里插入图片描述

3. 创建文件内容

  • 创建docx对象

    1. # 1.创建docx对象
    2. document = docx.Document()
  • 设置页面

    1. # 设置页眉
    2. run_header = document.sections[0].header.paragraphs[0].add_run("test")
    3. document.sections[0].header.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中对齐
  • 添加标题

    1. # 2.添加标题
    2. """
    3. add_heading():建立标题
    4. - document.add_heading('content_of_heading', level=n)
    5. """
    6. document.add_heading('侠客行', level=1) # 标题1格式
    7. document.add_heading('李白', level=2) # 标题2格式
  • 添加段落

    1. # 3.添加段落
    2. # 创建段落对象
    3. """
    4. add_paragraph():建立段落Paragraph内容
    5. - document.add_paragraph('paragraph_content')
    6. """
    7. paragraph_object = document.add_paragraph('赵客缦胡缨,吴钩霜雪明。')
    8. document.add_paragraph('银鞍照白马,飒沓如流星。')
    9. document.add_paragraph('十步杀一人,千里不留行。')
    10. document.add_paragraph('事了拂衣去,深藏身与名。')
    11. document.add_paragraph('闲过信陵饮,脱剑膝前横。')
    12. document.add_paragraph('将炙啖朱亥,持觞劝侯嬴。')
    13. document.add_paragraph('三杯吐然诺,五岳倒为轻。')
    14. document.add_paragraph('眼花耳热后,意气素霓生。')
    15. document.add_paragraph('救赵挥金槌,邯郸先震惊。')
    16. document.add_paragraph('千秋二壮士,烜赫大梁城。')
    17. document.add_paragraph('纵死侠骨香,不惭世上英。')
    18. document.add_paragraph('谁能书阁下,白首太玄经。')
    19. prior_paragraph_object = paragraph_object.insert_paragraph_before('') # 在paragraph前插入新段落
  • 建立Run内容,设置样式

    1. # 4.建立Run内容
    2. """
    3. Paragraph是由Run组成,使用add_run()方法可以在Paragraph中插入内容,语法如下:
    4. paragraph_object.add_run('run_content')
    5. """
    6. run1 = prior_paragraph_object.add_run('*'*13)
    7. run2 = prior_paragraph_object.add_run('%'*13)
    8. # 设置Run的样式
    9. """
    10. bold: 加粗
    11. italic:斜体
    12. underline:下划线
    13. strike:删除线
    14. """
    15. run1.bold = True
    16. run2.underline = True
    17. # 设置段落居中对齐
    18. for i in range(len(document.paragraphs)):
    19. document.paragraphs[i].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中对齐
  • 添加换页符

    1. # 5.添加换页符
    2. # add_page_break()
    3. document.add_page_break()
  • 插入图片

    1. # 6.插入图片
    2. # add_picture(),调整图片宽高需导入docx.shared模块
    3. document.add_picture('libai.jpeg', width=Pt(200), height=Pt(300))
    4. # 设置居中对齐
    5. document.paragraphs[len(document.paragraphs)-1].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中对齐
  • 创建表格,添加数据并设置简单样式

    1. # 7.创建表格
    2. """
    3. add_table(rows=n, cols=m)
    4. """
    5. table = document.add_table(rows=2, cols=5)
    6. # 添加表格内容
    7. # 添加第1行数据
    8. row = table.rows[0]
    9. row.cells[0].text = '姓名'
    10. row.cells[1].text = '字'
    11. row.cells[2].text = '号'
    12. row.cells[3].text = '所处时代'
    13. row.cells[4].text = '别称'
    14. # 添加第2行数据
    15. row = table.rows[1]
    16. row.cells[0].text = '李白'
    17. row.cells[1].text = '太白'
    18. row.cells[2].text = '青莲居士'
    19. row.cells[3].text = '唐朝'
    20. row.cells[4].text = '诗仙'
    21. # 插入行
    22. new_row = table.add_row() # 增加表格行
    23. new_row.cells[0].text = '白居易'
    24. new_row.cells[1].text = '乐天'
    25. new_row.cells[2].text = '香山居士'
    26. new_row.cells[3].text = '唐朝'
    27. new_row.cells[4].text = '诗魔'
    28. # 插入列
    29. new_column = table.add_column(width=Inches(1)) # 增加表格列
    30. new_column.cells[0].text = '代表作'
    31. new_column.cells[1].text = '《侠客行》、《静夜思》'
    32. new_column.cells[2].text = '《长恨歌》、《琵琶行》'
    33. # 计算表格的rows和cols的长度
    34. rows = len(table.rows)
    35. cols = len(table.columns)
    36. print(f'rows: {rows}')
    37. print(f'columns: {cols}')
    38. # 打印表格内容
    39. # for row in table.rows:
    40. # for cell in row.cells:
    41. # print(cell.text)
    42. # 设置表格样式
    43. # table.style = 'LightShading-Accent1'
    44. # UserWarning: style lookup by style_id is deprecated. Use style name as key instead.
    45. table.style = 'Light Shading Accent 1'
    46. # 循环将每一行,每一列都设置为居中
    47. for r in range(rows):
    48. for c in range(cols):
    49. table.cell(r, c).vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER # 垂直居中
    50. table.cell(r, c).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER # 水平居中
  • 设置页码并保存

    1. # 设置页码
    2. add_page_number(document.sections[0].footer.paragraphs[0])
    3. # 保存文件
    4. document.save('test2.docx')
  • 设置页码的代码(page_num.py)

    1. from docx import Document
    2. from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
    3. from docx.oxml import OxmlElement, ns
    4. def create_element(name):
    5. return OxmlElement(name)
    6. def create_attribute(element, name, value):
    7. element.set(ns.qn(name), value)
    8. def add_page_number(paragraph):
    9. paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
    10. page_run = paragraph.add_run()
    11. t1 = create_element('w:t')
    12. create_attribute(t1, 'xml:space', 'preserve')
    13. t1.text = 'Page '
    14. page_run._r.append(t1)
    15. page_num_run = paragraph.add_run()
    16. fldChar1 = create_element('w:fldChar')
    17. create_attribute(fldChar1, 'w:fldCharType', 'begin')
    18. instrText = create_element('w:instrText')
    19. create_attribute(instrText, 'xml:space', 'preserve')
    20. instrText.text = "PAGE"
    21. fldChar2 = create_element('w:fldChar')
    22. create_attribute(fldChar2, 'w:fldCharType', 'end')
    23. page_num_run._r.append(fldChar1)
    24. page_num_run._r.append(instrText)
    25. page_num_run._r.append(fldChar2)
    26. of_run = paragraph.add_run()
    27. t2 = create_element('w:t')
    28. create_attribute(t2, 'xml:space', 'preserve')
    29. t2.text = ' of '
    30. of_run._r.append(t2)
    31. fldChar3 = create_element('w:fldChar')
    32. create_attribute(fldChar3, 'w:fldCharType', 'begin')
    33. instrText2 = create_element('w:instrText')
    34. create_attribute(instrText2, 'xml:space', 'preserve')
    35. instrText2.text = "NUMPAGES"
    36. fldChar4 = create_element('w:fldChar')
    37. create_attribute(fldChar4, 'w:fldCharType', 'end')
    38. num_pages_run = paragraph.add_run()
    39. num_pages_run._r.append(fldChar3)
    40. num_pages_run._r.append(instrText2)
    41. num_pages_run._r.append(fldChar4)
  • 完整代码

    1. import docx
    2. from docx.enum.table import WD_TABLE_ALIGNMENT, WD_CELL_VERTICAL_ALIGNMENT
    3. from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
    4. from docx.shared import Pt, Inches
    5. from page_num import add_page_number
    6. # 1.创建docx对象
    7. document = docx.Document()
    8. # 设置页眉
    9. run_header = document.sections[0].header.paragraphs[0].add_run("test")
    10. document.sections[0].header.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中对齐
    11. print(len(document.sections))
    12. # 2.添加标题
    13. """
    14. add_heading():建立标题
    15. - document.add_heading('content_of_heading', level=n)
    16. """
    17. document.add_heading('侠客行', level=1) # 标题1格式
    18. document.add_heading('李白', level=2) # 标题2格式
    19. # 3.添加段落
    20. # 创建段落对象
    21. """
    22. add_paragraph():建立段落Paragraph内容
    23. - document.add_paragraph('paragraph_content')
    24. """
    25. paragraph_object = document.add_paragraph('赵客缦胡缨,吴钩霜雪明。')
    26. document.add_paragraph('银鞍照白马,飒沓如流星。')
    27. document.add_paragraph('十步杀一人,千里不留行。')
    28. document.add_paragraph('事了拂衣去,深藏身与名。')
    29. document.add_paragraph('闲过信陵饮,脱剑膝前横。')
    30. document.add_paragraph('将炙啖朱亥,持觞劝侯嬴。')
    31. document.add_paragraph('三杯吐然诺,五岳倒为轻。')
    32. document.add_paragraph('眼花耳热后,意气素霓生。')
    33. document.add_paragraph('救赵挥金槌,邯郸先震惊。')
    34. document.add_paragraph('千秋二壮士,烜赫大梁城。')
    35. document.add_paragraph('纵死侠骨香,不惭世上英。')
    36. document.add_paragraph('谁能书阁下,白首太玄经。')
    37. prior_paragraph_object = paragraph_object.insert_paragraph_before('') # 在paragraph前插入新段落
    38. # 4.建立Run内容
    39. """
    40. Paragraph是由Run组成,使用add_run()方法可以在Paragraph中插入内容,语法如下:
    41. paragraph_object.add_run('run_content')
    42. """
    43. run1 = prior_paragraph_object.add_run('*'*13)
    44. run2 = prior_paragraph_object.add_run('%'*13)
    45. # 设置Run的样式
    46. """
    47. bold: 加粗
    48. italic:斜体
    49. underline:下划线
    50. strike:删除线
    51. """
    52. run1.bold = True
    53. run2.underline = True
    54. # 设置段落居中对齐
    55. for i in range(len(document.paragraphs)):
    56. document.paragraphs[i].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中对齐
    57. # 5.添加换页符
    58. # add_page_break()
    59. document.add_page_break()
    60. # print(len(document.paragraphs))
    61. # 6.插入图片
    62. # add_picture(),调整图片宽高需导入docx.shared模块
    63. document.add_picture('libai.jpeg', width=Pt(200), height=Pt(300))
    64. # 设置居中对齐
    65. document.paragraphs[len(document.paragraphs)-1].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中对齐
    66. # 7.创建表格
    67. """
    68. add_table(rows=n, cols=m)
    69. """
    70. table = document.add_table(rows=2, cols=5)
    71. # 添加表格内容
    72. # 添加第1行数据
    73. row = table.rows[0]
    74. row.cells[0].text = '姓名'
    75. row.cells[1].text = '字'
    76. row.cells[2].text = '号'
    77. row.cells[3].text = '所处时代'
    78. row.cells[4].text = '别称'
    79. # 添加第2行数据
    80. row = table.rows[1]
    81. row.cells[0].text = '李白'
    82. row.cells[1].text = '太白'
    83. row.cells[2].text = '青莲居士'
    84. row.cells[3].text = '唐朝'
    85. row.cells[4].text = '诗仙'
    86. # 插入行
    87. new_row = table.add_row() # 增加表格行
    88. new_row.cells[0].text = '白居易'
    89. new_row.cells[1].text = '乐天'
    90. new_row.cells[2].text = '香山居士'
    91. new_row.cells[3].text = '唐朝'
    92. new_row.cells[4].text = '诗魔'
    93. # 插入列
    94. new_column = table.add_column(width=Inches(1)) # 增加表格列
    95. new_column.cells[0].text = '代表作'
    96. new_column.cells[1].text = '《侠客行》、《静夜思》'
    97. new_column.cells[2].text = '《长恨歌》、《琵琶行》'
    98. # 计算表格的rows和cols的长度
    99. rows = len(table.rows)
    100. cols = len(table.columns)
    101. print(f'rows: {rows}')
    102. print(f'columns: {cols}')
    103. # 打印表格内容
    104. # for row in table.rows:
    105. # for cell in row.cells:
    106. # print(cell.text)
    107. # 设置表格样式
    108. # table.style = 'LightShading-Accent1'
    109. # UserWarning: style lookup by style_id is deprecated. Use style name as key instead.
    110. table.style = 'Light Shading Accent 1'
    111. # 循环将每一行,每一列都设置为居中
    112. for r in range(rows):
    113. for c in range(cols):
    114. table.cell(r, c).vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER # 垂直居中
    115. table.cell(r, c).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTER # 水平居中
    116. # 设置页码
    117. add_page_number(document.sections[0].footer.paragraphs[0])
    118. # 保存文件
    119. document.save('test2.docx')

    效果:
    在这里插入图片描述


参考:
文章知识点与官方知识档案匹配,可进一步学习相关知识
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号