Python 将函数输出写入文件
Python write function output to file
如果这是一个愚蠢的问题,我很抱歉,但我没有多少 Python 经验
我有比较文件的功能
def compare_files(file1, file2):
fname1 = file1
fname2 = file2
# Open file for reading in text mode (default mode)
f1 = open(fname1)
f2 = open(fname2)
# Print confirmation
#print("-----------------------------------")
#print("Comparing files ", " > " + fname1, " < " +fname2, sep='\n')
#print("-----------------------------------")
# Read the first line from the files
f1_line = f1.readline()
f2_line = f2.readline()
# Initialize counter for line number
line_no = 1
# Loop if either file1 or file2 has not reached EOF
while f1_line != '' or f2_line != '':
# Strip the leading whitespaces
f1_line = f1_line.rstrip()
f2_line = f2_line.rstrip()
# Compare the lines from both file
if f1_line != f2_line:
########## If a line does not exist on file2 then mark the output with + sign
if f2_line == '' and f1_line != '':
print ("Line added:Line-%d" % line_no + "-"+ f1_line)
#otherwise output the line on file1 and mark it with > sign
elif f1_line != '':
print ("Line changed:Line-%d" % line_no + "-"+ f1_line)
########### If a line does not exist on file1 then mark the output with + sign
if f1_line == '' and f2_line != '':
print ("Line removed:Line-%d" % line_no + "-"+ f1_line)
# otherwise output the line on file2 and mark it with < sign
#elif f2_line != '':
#print("<", "Line-%d" % line_no, f2_line)
# Print a blank line
#print()
#Read the next line from the file
f1_line = f1.readline()
f2_line = f2.readline()
#Increment line counter
line_no += 1
# Close the files
f1.close()
f2.close()
我想将函数输出打印到文本文件
result=compare_files("1.txt", "2.txt")
print (result)
Line changed:Line-1-aaaaa
Line added:Line-2-sss
None
我试过以下方法:
f = open('changes.txt', 'w')
f.write(str(result))
f.close
但只有 None 被打印到 changes.txt
我正在使用 "workaround" sys.stdout 但想知道有没有其他方法可以代替重定向打印输出。
如果在函数输出中我指定 return 而不是打印,那么我只会得到第一个输出行(第 changed:Line-1-aaaaa 行)到 changes.txt
您的 'compare_files' 函数没有 return 任何内容,因此没有任何内容写入文件。使函数'return'成为某种东西,它应该可以工作。
您的函数没有 returning 任何东西,所以您正在打印“None”。如果您希望所有打印都转到文件而不是默认情况下的标准输出,您可以像对 return 值所做的那样更改每个打印语句。
或者您可以像 here 中那样对整个程序使用重定向。
因为默认情况下您不会返回任何函数 returns None
,所以这反映在您的 changes.txt
文件中。您可以创建一个变量来存储您想要的输出并 returns 它。
def compare_files(file1, file2):
fname1 = file1
fname2 = file2
# Open file for reading in text mode (default mode)
f1 = open(fname1)
f2 = open(fname2)
output_string = ""
# Print confirmation
# print("-----------------------------------")
# print("Comparing files ", " > " + fname1, " < " +fname2, sep='\n')
# print("-----------------------------------")
# Read the first line from the files
f1_line = f1.readline()
f2_line = f2.readline()
# Initialize counter for line number
line_no = 1
# Loop if either file1 or file2 has not reached EOF
while f1_line != '' or f2_line != '':
# Strip the leading whitespaces
f1_line = f1_line.rstrip()
f2_line = f2_line.rstrip()
# Compare the lines from both file
if f1_line != f2_line:
########## If a line does not exist on file2 then mark the output with + sign
if f2_line == '' and f1_line != '':
print("Line added:Line-%d" % line_no + "-" + f1_line)
output_string += "Line added:Line-%d" % line_no + "-" + f1_line + "\n"
# otherwise output the line on file1 and mark it with > sign
elif f1_line != '':
print("Line changed:Line-%d" % line_no + "-" + f1_line)
output_string += "Line changed:Line-%d" % line_no + "-" + f1_line +"\n"
########### If a line does not exist on file1 then mark the output with + sign
if f1_line == '' and f2_line != '':
print("Line removed:Line-%d" % line_no + "-" + f1_line)
output_string += "Line removed:Line-%d" % line_no + "-" + f1_line +"\n"
# otherwise output the line on file2 and mark it with < sign
# elif f2_line != '':
# print("<", "Line-%d" % line_no, f2_line)
# Print a blank line
# print()
# Read the next line from the file
f1_line = f1.readline()
f2_line = f2.readline()
# Increment line counter
line_no += 1
# Close the files
f1.close()
f2.close()
return output_string
您的 compare_files()
只是打印,但不会将任何内容传递给调用者。
如果要将 一项 传递给调用者,请使用 return
。您的函数流程到此结束。
如果您想将多个项目传递给呼叫者,您 yield
他们。使用 yield
将您的函数变成生成器函数。调用生成器函数会生成一个可以迭代的生成器对象。
示例:
def produce_strings():
for i in ['a', 'b', 'c']:
yield i + "x"
result = "\n".join(produce_strings())
print(result) # prints a line end separated string made of "ax", "bx" and "cx".
如果这是一个愚蠢的问题,我很抱歉,但我没有多少 Python 经验
我有比较文件的功能
def compare_files(file1, file2):
fname1 = file1
fname2 = file2
# Open file for reading in text mode (default mode)
f1 = open(fname1)
f2 = open(fname2)
# Print confirmation
#print("-----------------------------------")
#print("Comparing files ", " > " + fname1, " < " +fname2, sep='\n')
#print("-----------------------------------")
# Read the first line from the files
f1_line = f1.readline()
f2_line = f2.readline()
# Initialize counter for line number
line_no = 1
# Loop if either file1 or file2 has not reached EOF
while f1_line != '' or f2_line != '':
# Strip the leading whitespaces
f1_line = f1_line.rstrip()
f2_line = f2_line.rstrip()
# Compare the lines from both file
if f1_line != f2_line:
########## If a line does not exist on file2 then mark the output with + sign
if f2_line == '' and f1_line != '':
print ("Line added:Line-%d" % line_no + "-"+ f1_line)
#otherwise output the line on file1 and mark it with > sign
elif f1_line != '':
print ("Line changed:Line-%d" % line_no + "-"+ f1_line)
########### If a line does not exist on file1 then mark the output with + sign
if f1_line == '' and f2_line != '':
print ("Line removed:Line-%d" % line_no + "-"+ f1_line)
# otherwise output the line on file2 and mark it with < sign
#elif f2_line != '':
#print("<", "Line-%d" % line_no, f2_line)
# Print a blank line
#print()
#Read the next line from the file
f1_line = f1.readline()
f2_line = f2.readline()
#Increment line counter
line_no += 1
# Close the files
f1.close()
f2.close()
我想将函数输出打印到文本文件
result=compare_files("1.txt", "2.txt")
print (result)
Line changed:Line-1-aaaaa
Line added:Line-2-sss
None
我试过以下方法:
f = open('changes.txt', 'w')
f.write(str(result))
f.close
但只有 None 被打印到 changes.txt
我正在使用 "workaround" sys.stdout 但想知道有没有其他方法可以代替重定向打印输出。
如果在函数输出中我指定 return 而不是打印,那么我只会得到第一个输出行(第 changed:Line-1-aaaaa 行)到 changes.txt
您的 'compare_files' 函数没有 return 任何内容,因此没有任何内容写入文件。使函数'return'成为某种东西,它应该可以工作。
您的函数没有 returning 任何东西,所以您正在打印“None”。如果您希望所有打印都转到文件而不是默认情况下的标准输出,您可以像对 return 值所做的那样更改每个打印语句。
或者您可以像 here 中那样对整个程序使用重定向。
因为默认情况下您不会返回任何函数 returns None
,所以这反映在您的 changes.txt
文件中。您可以创建一个变量来存储您想要的输出并 returns 它。
def compare_files(file1, file2):
fname1 = file1
fname2 = file2
# Open file for reading in text mode (default mode)
f1 = open(fname1)
f2 = open(fname2)
output_string = ""
# Print confirmation
# print("-----------------------------------")
# print("Comparing files ", " > " + fname1, " < " +fname2, sep='\n')
# print("-----------------------------------")
# Read the first line from the files
f1_line = f1.readline()
f2_line = f2.readline()
# Initialize counter for line number
line_no = 1
# Loop if either file1 or file2 has not reached EOF
while f1_line != '' or f2_line != '':
# Strip the leading whitespaces
f1_line = f1_line.rstrip()
f2_line = f2_line.rstrip()
# Compare the lines from both file
if f1_line != f2_line:
########## If a line does not exist on file2 then mark the output with + sign
if f2_line == '' and f1_line != '':
print("Line added:Line-%d" % line_no + "-" + f1_line)
output_string += "Line added:Line-%d" % line_no + "-" + f1_line + "\n"
# otherwise output the line on file1 and mark it with > sign
elif f1_line != '':
print("Line changed:Line-%d" % line_no + "-" + f1_line)
output_string += "Line changed:Line-%d" % line_no + "-" + f1_line +"\n"
########### If a line does not exist on file1 then mark the output with + sign
if f1_line == '' and f2_line != '':
print("Line removed:Line-%d" % line_no + "-" + f1_line)
output_string += "Line removed:Line-%d" % line_no + "-" + f1_line +"\n"
# otherwise output the line on file2 and mark it with < sign
# elif f2_line != '':
# print("<", "Line-%d" % line_no, f2_line)
# Print a blank line
# print()
# Read the next line from the file
f1_line = f1.readline()
f2_line = f2.readline()
# Increment line counter
line_no += 1
# Close the files
f1.close()
f2.close()
return output_string
您的 compare_files()
只是打印,但不会将任何内容传递给调用者。
如果要将 一项 传递给调用者,请使用 return
。您的函数流程到此结束。
如果您想将多个项目传递给呼叫者,您 yield
他们。使用 yield
将您的函数变成生成器函数。调用生成器函数会生成一个可以迭代的生成器对象。
示例:
def produce_strings():
for i in ['a', 'b', 'c']:
yield i + "x"
result = "\n".join(produce_strings())
print(result) # prints a line end separated string made of "ax", "bx" and "cx".