如何使用python将输出写入txt文件?
所以我扫描了我的文件夹,然后把它打印到我的文本文件中,但我不知道为什么它只给我一个输出,而这个输出是最后一个文件名如何使用python将输出写入txt文件?,python,file,Python,File,所以我扫描了我的文件夹,然后把它打印到我的文本文件中,但我不知道为什么它只给我一个输出,而这个输出是最后一个文件名 import zipfile import os def out_fun(): for x in os.listdir('C:\Users\Guest\Desktop\OJT\scanner\samples_raw'): print x return x output = out_fun() file = open("result_vsdt.t
import zipfile
import os
def out_fun():
for x in os.listdir('C:\Users\Guest\Desktop\OJT\scanner\samples_raw'):
print x
return x
output = out_fun()
file = open("result_vsdt.txt","w")
file.write(output)
file.close()
我的txt文件中的唯一输出是:
fe8c341de79168a1254154f4e4403857c6e79c46
这必须是:
ED64498D29F40CC07C7FBFA2A05E29763F5E2
ED66E83AE790873FD92FEF146A2B70E559792EE
ef2f8d90ebae12c015ffea41252d5e25055b16c6
f4b8b762feb426de46a0d19b86f31173e0e77c2e
f4d0cc44a8018c807b9b1865ce2dd70f027d2ceb
f6c9b393b5148e45138f724cebf5b1e2fd8d9bc7
fa2229ef95b9e45e881ac27004c2a90f6c6e0947
FAC6687402B4AC4A39696F3F8830A6EC34585BE
fcbbfeb67cd2902de545fb159b0eed7343aeb502
fe5babc1e4f11e205457f2ec616f117fd4f4e326
fe8c341de79168a1254154f4e4403857c6e79c46
为什么只将最后一个文件的名称写入结果文件?
因为当x
的每个值都在out\u fun
函数中打印时,实际上只返回最后一个值。你需要把其他的东西放在某个地方,然后把它们还给你的朋友
如何返回所有内容?
创建一个名为output
的字符串,将x
的每个值追加到该字符串中,然后返回:
import os
def out_fun():
output = ''
for x in os.listdir('C:\Users\Guest\Desktop\OJT\scanner\samples_raw'):
print x
output += x + '\n'
return output
with file = open("result_vsdt.txt","w"):
file.write(out_fun())
“\n”
是新行字符。这使得舒尔的每个文件名都在一个新行上。为什么只将最后一个文件的名称写入结果文件?
因为当x
的每个值都在out\u fun
函数中打印时,实际上只返回最后一个值。你需要把其他的东西放在某个地方,然后把它们还给你的朋友
如何返回所有内容?
创建一个名为output
的字符串,将x
的每个值追加到该字符串中,然后返回:
import os
def out_fun():
output = ''
for x in os.listdir('C:\Users\Guest\Desktop\OJT\scanner\samples_raw'):
print x
output += x + '\n'
return output
with file = open("result_vsdt.txt","w"):
file.write(out_fun())
“\n”
是新行字符。这使得舒尔的每个文件名都在一个新的行上。您的for循环将遍历您的文件,并以最后一个文件结束。这意味着,x将始终是您的最后一个文件。
如果要返回所有文件,需要创建一个列表并将所有文件保存在其中,如:
def out_fun():
array = [""]
for x in os.listdir('C:\Users\Guest\Desktop\OJT\scanner\samples_raw'):
array.append(x)
return '\n'.join(array)
for循环将遍历文件并以最后一个文件结束。这意味着,x将始终是您的最后一个文件。 如果要返回所有文件,需要创建一个列表并将所有文件保存在其中,如:
def out_fun():
array = [""]
for x in os.listdir('C:\Users\Guest\Desktop\OJT\scanner\samples_raw'):
array.append(x)
return '\n'.join(array)
尝试此方法会更好一些,它使用更少的内存,您不需要在函数中创建列表或加载所有文件内容:
import zipfile
import os
def out_fun():
for x in os.listdir('C:\Users\Guest\Desktop\OJT\scanner\samples_raw'):
yield x
file = open("result_vsdt.txt","w")
for line in out_fun():
file.write(line + '\n')
file.close()
编辑:
打开文件时,最好将
与一起使用,如下所示:
with open("result_vsdt.txt","w") as file:
for line in out_fun():
file.write(line + '\n')
它将自动关闭文件。试试这个,它会更好一点,占用的内存更少,您不需要创建列表或在函数中加载所有文件内容:
import zipfile
import os
def out_fun():
for x in os.listdir('C:\Users\Guest\Desktop\OJT\scanner\samples_raw'):
yield x
file = open("result_vsdt.txt","w")
for line in out_fun():
file.write(line + '\n')
file.close()
编辑:
打开文件时,最好将与一起使用,如下所示:
with open("result_vsdt.txt","w") as file:
for line in out_fun():
file.write(line + '\n')
它将自动关闭文件。您在os.listdir上迭代,每次都将result写入x,但只返回函数out\u fun()中的最后一个x。您应该收集列表中的所有x,然后加入它。您只返回out\u fun
中的最后一个x
值(在for
循环结束后)。尝试返回os.listdir('C:\Users\Guest\Desktop\OJT\scanner\samples\u raw')
而不是x
。您遍历os.listdir,每次都将result写入x,但只返回函数out\u fun()中的最后一个x。您应该收集列表中的所有x,然后加入它。您只返回out\u fun
中的最后一个x
值(在for
循环结束后)。尝试返回os.listdir('C:\Users\Guest\Desktop\OJT\scanner\samples\u raw')
而不是x
。名称错误:名称“output”不正确defined@jeremydevera固定的这是一个打字错误。当我们有一大堆行的时候,yield
非常重要。如果您觉得我的答案有帮助,请检查绿色的。NameError:名称“output”不正确defined@jeremydevera固定的这是一个打字错误。当我们有一大堆行的时候,yield
非常重要。如果您觉得我的答案有帮助,请检查绿色的答案。UnboundLocalError:分配前引用的局部变量“输出”我已更新了我的答案,请您使用我提供的完整示例进行尝试。UnboundLocalError:分配前引用的局部变量“输出”我已更新了我的答案,你能用我提供的完整例子试试吗