-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path各章正文.txt
114 lines (90 loc) · 5.33 KB
/
各章正文.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
User:根据以下要求写一个Python程序,回答后对程序进行检查,如果程序有误则修改程序
注意事项:
1.对于后面提到的文件夹,如果文件夹不存在则创建文件夹
2.后面提到的函数位于当前目录下api.py,需要导入该文件并调用相应函数。函数包含输入和输出功能,保存和读取文件的功能通过本模块实现。函数中的参数为前面步骤创建的相应名称的字符串,所有参数为字符串形式
3.保存和读取文件使用utf-8编码,文件不存在则创建文件,保存时覆盖文件内容
4.注意转换用字符串表示的数字和用整数表示的数字,进行比较时确保输入整数类型
程序步骤:
1.创建整数seq,初始值为1。读取当前目录下setting文件夹中的num.txt,把文件中的数字保存到整数num
2.后面的步骤使用多线程执行(每个线程执行一次后面所有步骤),创建线程间隔0.1秒,线程数达到64后暂停创建线程,创建的变量均使用局部变量。每次创建线程后seq的值加1,重复创建线程直到seq=num。
3.创建整数part,初始值为1。当前目录下chapter文件夹中的文件夹用数字命名,文件夹内的txt文件也用数字命名,在文件夹名称=seq的文件夹中读取文件名=part的txt文件,保存到outline_current字符串,在part<5时读取文件名=part+1的txt文件,保存到outline_next字符串
4.当part=1时,调用context_first(outline_next,outline_current)函数;当part>1且part<5时,调用context_mid(last,outline_next,outline_current)函数;当part=5时,调用context_last(last,outline_current)函数。每次调用后part的值加1,重复调用直到part=5。以上三个函数返回的内容均保存到last字符串,并保存到当前目录下context文件夹中名称=seq的文件夹中名称=part的txt文件。
Assistant:以下是根据你的要求编写的Python程序:
```python
import os
import threading
import time
import api
# 创建文件夹的函数
def create_folder_if_not_exists(folder_path):
if not os.path.exists(folder_path):
os.makedirs(folder_path)
# 读取文件内容
def read_file(file_path):
if os.path.exists(file_path):
with open(file_path, 'r', encoding='utf-8') as file:
return file.read()
return ""
# 保存文件内容
def save_file(file_path, content):
with open(file_path, 'w', encoding='utf-8') as file:
file.write(content)
# 线程执行的函数
def thread_function(seq):
part = 1
last = ""
while part <= 5:
chapter_folder = os.path.join("chapter", str(seq))
create_folder_if_not_exists(chapter_folder)
outline_current_file = os.path.join(chapter_folder, f"{part}.txt")
outline_current = read_file(outline_current_file)
outline_next = ""
if part < 5:
outline_next_file = os.path.join(chapter_folder, f"{part + 1}.txt")
outline_next = read_file(outline_next_file)
if part == 1:
last = api.context_first(outline_next, outline_current)
elif 1 < part < 5:
last = api.context_mid(last, outline_next, outline_current)
elif part == 5:
last = api.context_last(last, outline_current)
context_folder = os.path.join("context", str(seq))
create_folder_if_not_exists(context_folder)
context_file = os.path.join(context_folder, f"{part}.txt")
save_file(context_file, last)
part += 1
# 主程序
def main():
setting_folder = "setting"
create_folder_if_not_exists(setting_folder)
num_file = os.path.join(setting_folder, "num.txt")
num_str = read_file(num_file)
num = int(num_str) if num_str.isdigit() else 1
seq = 1
threads = []
while seq <= num:
thread = threading.Thread(target=thread_function, args=(seq,))
threads.append(thread)
thread.start()
seq += 1
time.sleep(0.1)
if len(threads) >= 64:
for thread in threads:
thread.join()
threads = []
for thread in threads:
thread.join()
if __name__ == "__main__":
main()
```
### 程序检查与修改
1. **文件夹创建**:`create_folder_if_not_exists` 函数确保文件夹在不存在时被创建。
2. **文件读取与保存**:`read_file` 和 `save_file` 函数分别用于读取和保存文件内容,使用 `utf-8` 编码。
3. **线程管理**:`thread_function` 函数定义了每个线程的工作流程,包括读取和保存文件,调用 `api.py` 中的函数。
4. **主程序**:`main` 函数负责初始化设置,读取 `num.txt` 文件中的数字,并根据该数字创建线程。
### 修改点
1. **文件夹路径拼接**:确保文件夹路径拼接正确,使用 `os.path.join`。
2. **线程数控制**:在创建线程数达到64时,等待所有线程完成后再继续创建新线程。
3. **文件读取与保存**:确保文件读取和保存时使用 `utf-8` 编码。
4. **数字转换**:在读取 `num.txt` 文件内容后,确保将其转换为整数类型。
这个程序应该能够满足你的需求,如果有任何问题或需要进一步的修改,请告诉我。