Python自动文件操作咨询:列表定义标题及批量生成文件报错问题
问题解答
问题1:从列表中定义标题,自动将文件导入Python?
首先得明确你说的“从列表中定义标题”具体指向——如果是列表里存的是你要导入的Python模块名(不带.py后缀),那完全可以实现自动导入。这里给你两种最常见的场景和实现方式:
场景1:动态导入列表中的模块,并保留列表元素作为模块引用标识
比如你有module_a.py、module_b.py两个模块,列表是['module_a', 'module_b'],可以用importlib模块来完成动态导入:import importlib module_list = ["module_a", "module_b"] # 你的标题/模块名列表 imported_modules = {} for module_name in module_list: # 动态导入指定模块 module = importlib.import_module(module_name) # 把导入的模块存入字典,用列表元素作为键方便后续调用 imported_modules[module_name] = module # 之后就能通过字典调用模块内容,比如: # imported_modules["module_a"].your_function()场景2:读取列表中“标题”对应的文本文件内容到Python
如果列表里是文件名(比如['note1.txt', 'note2.txt']),要自动读取这些文件的内容:file_list = ["note1.txt", "note2.txt"] # 你的标题/文件名列表 file_contents = {} for file_name in file_list: # 用with语句打开文件,会自动帮你关闭文件,比直接open更安全 with open(file_name, "r", encoding="utf-8") as f: content = f.read() file_contents[file_name] = content # 读取后的内容存在字典里,比如查看note1.txt的内容: # print(file_contents["note1.txt"])
如果你的需求和上面两种不一样,可以补充细节,我再帮你调整方案~
问题2:Python自动创建n个文件并写入n²的错误解决
先帮你拆解报错原因:TypeError: unsupported operand type(s) for %: '_io.TextIOWrapper' and 'int'——你把字符串格式化的%运算符放在了open()函数调用之后,这时候open("i%.txt", "w+")已经返回了一个文件对象(_io.TextIOWrapper类型),用这个对象去和整数i做%运算,自然会报错!另外还有个小问题:i**2是整数,而文件的write()方法只能接受字符串,直接写也会触发错误。
给你修正后的代码,每一步都加了注释:
# 这里用range(1,100),如果需要从0开始就改成range(0,100),看你需求调整 for i in range(1, 100): # 先格式化文件名:把i替换到字符串里,得到比如"1.txt"、"2.txt" file_name = "%d.txt" % i # with语句会自动管理文件的打开和关闭,避免忘记关文件的问题 with open(file_name, "w+", encoding="utf-8") as x: # 把i的平方转成字符串再写入文件 x.write(str(i**2))
或者用Python3.6+支持的f-string格式化,代码更简洁直观:
for i in range(1, 100): with open(f"{i}.txt", "w+", encoding="utf-8") as x: x.write(str(i**2))
这样运行就不会报错啦,with语句也很适合新手,能避免很多文件操作的坑~
内容的提问来源于stack exchange,提问作者VK1
相关产品推荐
相关产品推荐

