编写csv时循环不良或语法错误?

时间:2019-01-24 15:54:54

标签: python pyautogui

我正在尝试使用pyautogui记录我的鼠标位置的输出坐标或X和Y坐标,并将它们写入csv文件。每当我运行代码时,它都会在单独的列中打印X和Y,这样很好,但是在X下方的左上角显示“ True”,然后在Y列下方的一行也显示“ True”。我真的不明白为什么会这样。

import pyautogui, sys
import numpy as np
import csv

try:
    while True:
        x, y = pyautogui.position()
        positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
        print(positionStr)
except KeyboardInterrupt:
    print('\n')

while True:
    with open('Mousemovement.csv', mode = 'w') as csv_file:
        fieldnames = ['X', 'Y']
        writer = csv.DictWriter(csv_file, fieldnames = fieldnames)
        writer.writeheader()
        writer.writerow({'X': x in pyautogui.position()})
        writer.writerow({'Y': y in pyautogui.position()})

1 个答案:

答案 0 :(得分:0)

x in pyautogui.position()

使用Python in运算符。这是对membership的测试-基本上,x中是否存在pyautogui.position()。这将返回一个boolean值(TrueFalse)。然后将此值写入您的CSV文件。

此外,您每个循环调用writerow两次,这就是为什么Y值出现在X之下的原因。

最后,您将多次打开和写入CSV文件。您只应打开一次,编写标题,然后进入循环以编写值。

您只需要这样重写代码:

with open('Mousemovement.csv', mode = 'w') as csv_file:
    fieldnames = ['X', 'Y']
    writer = csv.DictWriter(csv_file, fieldnames = fieldnames)
    writer.writeheader()
    while True:
        x, y = pyautogui.position() # Get the position into x and y
        writer.writerow({'X': x, 'Y': y}) # Pass a single dictionary, so one row is printed