str(i).endswith('doc','docx')
时间: 2023-08-04 22:09:14 浏览: 152
字符串的 `endswith()` 方法只接受一个参数,即要匹配的后缀字符串。如果你要同时匹配多个后缀,可以将它们放在一个元组中,然后使用 `endswith()` 方法进行匹配,例如:
```python
if i.endswith(('doc', 'docx')):
# do something
```
这样,如果字符串 `i` 的结尾是 `'doc'` 或者 `'docx'`,就会返回 True,执行相应的操作。
相关问题
使用python编写代码将一个文件夹下的所有子文件夹下的.sv文件按照文件名称为model.docx的文件格式转化为与.sv同名的.docx的文件,页眉写上该.SV文件的名称,并写上行号,每页50行
好的,可以使用python内置的os和docx模块来完成这个任务。以下是一个示例代码,注释中有详细的解释:
```python
import os
from docx import Document
# 设置每页的行数
ROWS_PER_PAGE = 50
# 遍历文件夹及其子文件夹下的所有.sv文件
for root, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.sv'):
# 构造.docx文件名
docx_filename = os.path.splitext(filename)[0] + '.docx'
# 创建docx文档对象
doc = Document()
# 添加页眉
header = doc.sections[0].header
header.paragraphs[0].add_run(filename)
# 打开.sv文件并逐行读取
with open(os.path.join(root, filename), 'r') as f:
line_count = 0
for line in f:
# 每50行添加一个分页符
if line_count % ROWS_PER_PAGE == 0 and line_count > 0:
doc.add_page_break()
# 添加行号和文本内容
p = doc.add_paragraph()
p.add_run(str(line_count + 1) + ' ').bold = True
p.add_run(line.strip())
# 更新行数计数器
line_count += 1
# 保存.docx文件
doc.save(docx_filename)
```
注意,这个代码需要将文件夹中的所有.sv文件都转换为.docx文件,如果只需要转换某个文件夹下的文件,可以将`os.walk('.')`改为`os.walk('path/to/folder')`。另外,由于每个.docx文件都是新创建的,因此如果该文件名已存在,会覆盖原有文件。
Traceback (most recent call last): File "C:\Users\qijunqing\Desktop\CC02\sv2doc3.py", line 38, in <module> sv_to_docx(folder_path) File "C:\Users\qijunqing\Desktop\CC02\sv2doc3.py", line 20, in sv_to_docx section = docx.Sections[0] File "C:\Users\qijunqing\PycharmProjects\pythonProject\venv\lib\site-packages\win32com\client\dynamic.py", line 638, in __getattr__ raise AttributeError("%s.%s" % (self._username_, attr)) AttributeError: Add.Sections
出现该错误的原因是因为 `Add()` 方法返回的是一个 `Document` 对象,而不是一个 `Application` 对象,因此无法通过 `Sections` 属性来访问页眉和页脚。
可以将 `Add()` 方法返回的 `Document` 对象存储在一个变量中,然后使用该变量来访问页眉和页脚。修改后的代码如下:
```python
import os
import win32com.client as win32
def sv_to_docx(folder_path):
# 创建Word应用程序
word = win32.Dispatch('Word.Application')
# 遍历文件夹下的所有文件和子文件夹
for root, dirs, files in os.walk(folder_path):
for file in files:
# 判断文件是否为.sv文件
if file.endswith('.sv'):
sv_path = os.path.join(root, file)
# 读取.sv文件内容
with open(sv_path, 'r') as f:
sv_content = f.readlines()
# 创建.docx文件
docx_path = os.path.join(root, file[:-3] + 'docx')
docx = word.Documents.Add()
# 获取第一个Section对象
section = docx.Sections.Item(1)
# 获取页眉Range对象
header_range = section.Headers(win32.constants.wdHeaderFooterPrimary).Range
header_range.Text = file[:-3]
# 将.sv内容写入.docx文件
line_num = 0
for line in sv_content:
line_num += 1
docx.Content.Paragraphs.Add().Range.Text = str(line_num) + '. ' + line.strip()
if line_num % 50 == 0:
docx.Content.InsertBreak(win32.constants.wdPageBreak)
# 保存.docx文件
docx.SaveAs(docx_path)
docx.Close()
# 退出Word应用程序
word.Quit()
```
再次运行代码,应该就不会出现该错误了。
阅读全文