我的小项目是将坐标写入文件,而我的代码如下所示:
import pyautogui
import time
c = open("coord.txt", "w")
while True:
x, y = pyautogui.position()
positionStr = str(x).rjust(4) + str(y).rjust(4)
print(positionStr)
c.write(positionStr)
time.sleep(1)
不起作用,因为它在终端中显示了坐标,但是文件coord.txt仍然为空
答案 0 :(得分:1)
您只是在循环内迷失了flush
。 write
方法不一定会将数据写入磁盘。您必须调用flush
方法以确保发生这种情况。
import pyautogui
import time
c = open("coord.txt", "w")
while True:
x, y = pyautogui.position()
positionStr = str(x).rjust(4) + str(y).rjust(4)
print(positionStr)
c.write(positionStr + '\n')
c.flush()
time.sleep(1)
最好将c = open("coord.txt", "a")
替换为with open("coord.txt", "w") as c:
,以便在循环结束时文件自动关闭,否则需要调用close
。
import pyautogui
import time
with open("coord.txt", "w") as c:
while True:
x, y = pyautogui.position()
positionStr = str(x).rjust(4) + str(y).rjust(4)
print(positionStr)
c.write(positionStr + '\n')
c.flush()
time.sleep(1)
您还可以使用print()
函数写入文件:
import pyautogui
import time
with open("coord.txt", "w") as c:
while True:
x, y = pyautogui.position()
positionStr = str(x).rjust(4) + str(y).rjust(4)
print(positionStr)
print(positionStr, file=c, flush=True)
time.sleep(1)
这是因为print()
被定义为print(object(s), sep=separator, end=end, file=file, flush=flush)
,其中:
object(s)
:任意对象,并且任意数量。在打印之前将转换为字符串sep='separator'
:可选。如果存在多个对象,请指定如何分离对象。默认值为' '
end='end'
:可选。指定末尾要打印的内容。默认值为'\n'
(换行符)file
:可选。具有write方法的对象。默认值为sys.stdout
flush
:可选。一个布尔值,指定输出是刷新(True
)还是缓冲(False
)。默认值为False
答案 1 :(得分:0)
您需要将模式从w
更改为a
,以便它可以附加到文件中。
import pyautogui
import time
with open("coord.txt", "a") as writer: #This is better so that you dont have to worry about closing the file
while True:
x, y = pyautogui.position()
positionStr = str(x).rjust(4) + str(y).rjust(4)
print(positionStr)
writer.write(positionStr+"\n")
time.sleep(1)
答案 2 :(得分:0)
记住在写入文件后执行c.close()
或c.flush()
。