将鼠标位置写入.txt文件

时间:2020-09-24 12:08:10

标签: python file

我的小项目是将坐标写入文件,而我的代码如下所示:

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仍然为空

3 个答案:

答案 0 :(得分:1)

您只是在循环内迷失了flushwrite方法不一定会将数据写入磁盘。您必须调用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()

也许是This question

的副本
相关问题