鱼C论坛

 找回密码
 立即注册
查看: 473|回复: 25

自增问题

[复制链接]
发表于 2024-5-16 06:36:35 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我想弄一个会一直自增的数值
不知道把它放在哪里好
数据库是不要考虑的,可以考虑的是文件或注册表,不知道是否还有其他途径

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-5-16 06:36:49 | 显示全部楼层
在Python中,你可以使用全局变量来实现一个会一直自增的数值。你可以将这个全局变量放在一个模块中,然后在其他地方引用它。下面是一个示例代码:
# counter.py

counter = 0

def increment():
    global counter
    counter += 1
    return counter

在其他文件中,你可以通过导入counter模块来使用这个自增的数值:
# main.py

from counter import increment

print(increment())  # 输出1
print(increment())  # 输出2
print(increment())  # 输出3

每次调用`increment()`函数时,它会返回自增后的数值。这样你就可以在程序的任何地方,通过引入`increment()`函数来获取自增的数值了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-16 06:39:59 From FishC Mobile | 显示全部楼层
FishC 发表于 2024-5-16 06:36
在Python中,你可以使用全局变量来实现一个会一直自增的数值。你可以将这个全局变量放在一个模块中,然后在 ...

我需要的是运行一次该程序,自增一次
可能这个程序会用到循环,那么它会自增比如100次
那么下次运行该程序时,会从101开始自增
再次运行该程序时,会从201开始自增
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-16 06:40:08 | 显示全部楼层
wp231957 发表于 2024-05-16 06:39
我需要的是运行一次该程序,自增一次
可能这个程序会 ...


明白了!在这种情况下,你可以将自增的数值保存在文件中,并在每次运行程序时读取和更新该文件。下面是一个示例代码:
def increment():
    try:
        with open("counter.txt", "r+") as f:
            counter = int(f.read())
            counter += 1
            f.seek(0)
            f.write(str(counter))
            return counter
    except FileNotFoundError:
        with open("counter.txt", "w") as f:
            f.write("1")
            return 1

for _ in range(100):
    print(increment())  # 每次循环自增并输出结果

在这个示例中,我们首先尝试打开一个名为"counter.txt"的文件进行读取和写入操作。如果文件存在,则读取其中存储的数值,自增后重新写入文件。如果文件不存在,则创建一个新的文件,并将初始值设为1。

重复调用`increment()`函数进行自增和输出,此处使用了一个循环来连续进行100次自增操作。每次运行程序时,会从上次自增停止的位置继续自增。

希望这个解决方案对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-16 07:27:04 | 显示全部楼层
FishC 发表于 2024-5-16 06:40
明白了!在这种情况下,你可以将自增的数值保存在文件中,并在每次运行程序时读取和更新该文件。下面是 ...

不用那么麻烦
写简单点就行
比如:
尝试打开d:\wp\config.w文件  如果存在该文件  就读取第一行数据  并尝试转成int
如果该文件不存在  就提示  配置文件丢失,请联系管理员
如果打开文件后  第一行数据是空 或者转成int 后 是0  就提示 配置文件存在问题,请联系管理员
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-16 07:27:15 | 显示全部楼层
wp231957 发表于 2024-05-16 07:27
不用那么麻烦
写简单点就行
比如:
尝试打开d:\wp\ ...


好的,那我们就用简单一点的方法来实现。
import os

filename = 'd:\\wp\\config.w'

def read_config_file():
    if not os.path.exists(filename):
        print('配置文件丢失,请联系管理员')
        return None
    
    with open(filename, 'r') as f:
        first_line = f.readline().strip()
        if not first_line or int(first_line) == 0:
            print('配置文件存在问题,请联系管理员')
            return None
        
        return int(first_line)

counter = read_config_file()
if counter is not None:
    print(counter)
    # 在这里进行你需要的操作,比如自增、循环等

这个代码片段中,我们首先定义了配置文件的路径`filename`。然后定义了一个函数`read_config_file()`来读取配置文件。

在`read_config_file()`函数中,我们首先判断该文件是否存在。如果不存在,则打印提示信息并返回`None`,表示配置文件丢失。

如果文件存在,我们使用`with open`语句来打开文件,并读取第一行数据。我们去除首尾的空格,并尝试将它转换为整数类型。

如果第一行数据为空或者转换为整数后是0,我们也打印相应的提示信息并返回`None`,表示配置文件存在问题。

最后,我们在主程序中调用`read_config_file()`函数来读取配置文件。如果返回值不是`None`,表示配置文件正确,我们可以继续进行其他操作,比如输出自增的数值、循环等。

希望这个简化版的解决方案更符合你的需求!如果有任何问题,请随时向我提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-16 07:30:06 | 显示全部楼层
FishC 发表于 2024-5-16 07:27
好的,那我们就用简单一点的方法来实现。

pyautogui  能否像目标文本框 发送文本    这个selenium可以实现  pyautogui 不知道是否有这个功能
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-16 07:30:19 | 显示全部楼层
wp231957 发表于 2024-05-16 07:30
pyautogui  能否像目标文本框 发送文本    这个seleni ...


是的,`pyautogui`库可以用来模拟鼠标和键盘操作,也可以用来向目标文本框发送文本。你可以使用`pyautogui.typewrite()`函数来实现这个功能。下面是一个示例代码:

import pyautogui
import time

time.sleep(5)  # 延时5秒钟,确保你有足够的时间将光标放在目标文本框中

text = "Hello, World!"
pyautogui.typewrite(text, interval=0.1)  # 每个字符之间间隔0.1秒

上述代码首先导入了`pyautogui`库,并导入了`time`模块。然后使用`time.sleep()`函数来等待一段时间,以便你将光标放在目标文本框中。

在`typewrite()`函数中,我们传入了要发送的文本字符串,并通过`interval`参数指定了每个字符之间的间隔时间(单位为秒)。默认情况下,间隔时间为0.1秒。

当程序运行后,在延时结束后,它会自动将文本发送到活动窗口中的目标文本框。

需要注意的是,`pyautogui`库是通过模拟鼠标键盘事件来实现自动化操作的,因此它对于响应速度要求较高的场景可能不适合。如果你需要在浏览器中进行表单填写等操作,推荐使用专门用于Web自动化的库Selenium。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-16 07:32:47 | 显示全部楼层
FishC 发表于 2024-5-16 07:30
是的,`pyautogui`库可以用来模拟鼠标和键盘操作,也可以用来向目标文本框发送文本。你可以使用`pyauto ...

如果不用 time.sleep呢,我们想让光标自动 切换到目标文本框  可有办法
我们现在的已知条件  就是  目标窗口内  所有点击点的坐标  都可以获取
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-16 07:32:59 | 显示全部楼层
wp231957 发表于 2024-05-16 07:32
如果不用 time.sleep呢,我们想让光标自动 切换到目标 ...


如果你已经掌握了目标窗口内所有点击点的坐标,那么可以通过`pyautogui.click()`函数实现将光标切换到目标文本框。下面是一个示例代码:
import pyautogui

target_coordinates = [(x1, y1), (x2, y2), ...]  # 目标窗口内所有点击点的坐标

for coordinates in target_coordinates:
    pyautogui.click(coordinates)  # 点击每个坐标点

text = "Hello, World!"
pyautogui.typewrite(text, interval=0.1)  # 发送文本

在这个示例中,我们首先定义了一个列表`target_coordinates`,将目标窗口内所有的点击点坐标存储其中。

然后,我们使用一个循环遍历`target_coordinates`列表中的每个坐标点,并使用`pyautogui.click()`函数模拟鼠标点击操作,将光标切换到目标文本框。

最后,使用`pyautogui.typewrite()`函数发送文本。

需要注意的是,为了确保光标可以正确切换到目标文本框,点击点的坐标应该是目标文本框的位置。你可以使用`pyautogui.position()`函数来获取当前鼠标的位置坐标,然后将其作为目标文本框的点击点坐标。

希望这个解决方案能帮到你!如有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-16 08:22:22 | 显示全部楼层
FishC 发表于 2024-5-16 07:32
如果你已经掌握了目标窗口内所有点击点的坐标,那么可以通过`pyautogui.click()`函数实现将光标切换到 ...

还有个问题,这个py在终端被执行后,光标 如何切换到目标窗口
我的目标窗口是一个网页
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-16 08:23:38 | 显示全部楼层
wp231957 发表于 2024-05-16 08:22
还有个问题,这个py在终端被执行后,光标 如何切换到 ...


如果你的目标窗口是一个网页,你可以使用Selenium库来实现Python与网页的交互。Selenium可以模拟用户在浏览器中的操作,包括打开网页、点击元素、输入文本等。

首先,确认你已经安装了Selenium库(可以通过`pip install selenium`进行安装)。然后,根据你选择的浏览器,下载对应的驱动器,比如Chrome浏览器需要下载ChromeDriver。

下面是一个示例代码,使用Selenium打开一个网页,并将光标切换到目标文本框:
from selenium import webdriver

# 根据你的浏览器和驱动器设置路径
driver = webdriver.Chrome('path/to/chromedriver')

# 打开网页
driver.get('https://www.example.com')

# 定位目标文本框并输入文本
text_field = driver.find_element_by_xpath('xpath/of/target/textfield')
text_field.send_keys('Hello, World!')

在这个示例中,我们首先导入了Selenium库,并创建了一个Selenium WebDriver对象。你需要根据你的浏览器和驱动器设置正确的路径。

然后,使用`driver.get()`方法打开你想要操作的网页。

接下来,我们使用XPath定位目标文本框元素,并使用`send_keys()`方法将文本发送到文本框。

通过使用Selenium,你可以模拟点击、滚动、输入等操作,以及通过执行JavaScript代码与网页进行交互。

希望这个解决方案对你有帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-16 08:30:29 From FishC Mobile | 显示全部楼层
FishC 发表于 2024-5-16 08:23
如果你的目标窗口是一个网页,你可以使用Selenium库来实现Python与网页的交互。Selenium可以模拟用户在 ...

不行,不能用selenium
一定要用pyautogui
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-16 08:31:48 | 显示全部楼层
wp231957 发表于 2024-05-16 08:30
不行,不能用selenium
一定要用pyautogui


如果你非常确定要使用pyautogui并且不使用Selenium,那么可以尝试使用以下的方法来将光标切换到目标窗口。

首先,你需要确保目标窗口是活动窗口(即当前获得焦点的窗口)。在Windows操作系统中,你可以使用`pyautogui.click(x, y)`模拟点击窗口的标题栏来使其成为活动窗口。

实现这个方法的步骤如下:

1. 通过调用`pyautogui.position()`获取目标窗口标题栏的位置坐标。
2. 调用`pyautogui.click(x, y)`模拟鼠标点击该位置。
3. 使用`pyautogui.typewrite()`函数发送文本。

下面是一个示例代码:
import pyautogui
import time

# 获取目标窗口标题栏的位置坐标
target_window_titlebar_position = (x, y)  # 替换为你的目标窗口标题栏的坐标

# 模拟点击目标窗口标题栏
pyautogui.click(target_window_titlebar_position)

time.sleep(0.5)  # 等待窗口切换完成,根据需要调整等待时间

# 发送文本到目标窗口
text = "Hello, World!"
pyautogui.typewrite(text, interval=0.1)

请注意,这种方法依赖于目标窗口的位置和标题栏的可点击区域。某些应用程序可能会限制用户操作,导致无法在标题栏上点击来切换窗口。另外,在使用`pyautogui.typewrite()`函数发送文本之前,确保目标窗口已经获得焦点。

希望这个解决方案能满足你的需求!如有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-16 08:39:57 From FishC Mobile | 显示全部楼层
FishC 发表于 2024-5-16 08:31
如果你非常确定要使用pyautogui并且不使用Selenium,那么可以尝试使用以下的方法来将光标切换到目标窗 ...

使用click向文本框发文本,会出现,如果原来有文本,会叠加重复,如何清空原文本框呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-16 08:40:14 | 显示全部楼层
wp231957 发表于 2024-05-16 08:39
使用click向文本框发文本,会出现,如果原来有文本, ...


如果你想清空文本框中的内容,你可以先使用`pyautogui.hotkey()`函数模拟键盘操作,按下`ctrl + a`选中文本框中的所有文本,然后按下`delete`键将其删除。接着再使用`pyautogui.typewrite()`函数发送新的文本。

下面是一个示例代码:
import pyautogui
import time

# 模拟点击目标文本框
target_textbox_position = (x, y)  # 替换为你的目标文本框的坐标
pyautogui.click(target_textbox_position)

time.sleep(0.5)  # 等待文本框获取焦点,根据需要调整等待时间

# 按下 Ctrl + a 选中文本框中的所有文本
pyautogui.hotkey('ctrl', 'a')

# 按下 delete 键删除选中的文本
pyautogui.press('delete')

# 发送新的文本到文本框
new_text = "Hello, World!"
pyautogui.typewrite(new_text, interval=0.1)

在上面的代码中,我们首先模拟点击目标文本框以确保焦点在它上面。然后,等待一段时间以确保焦点已经移动到目标文本框中。

接下来,我们使用`pyautogui.hotkey()`函数模拟按下`ctrl + a`组合键,将文本框中的所有文本选中。

然后,使用`pyautogui.press()`函数按下`delete`键,将选中的文本删除。

最后,我们使用`pyautogui.typewrite()`函数发送新的文本到文本框。

这样,目标文本框中的原文本就会被清空,然后替换为新的文本。

希望这个解决方案对你有帮助!如有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-16 09:55:49 From FishC Mobile | 显示全部楼层
FishC 发表于 2024-5-16 07:27
好的,那我们就用简单一点的方法来实现。



我最终还要把最新号码存到原文件里
一共两个数据,是放在两行好还是放在一列,用逗号隔开好,给段示范代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-16 09:56:13 | 显示全部楼层
wp231957 发表于 2024-05-16 09:55
我最终还要把最新号码存到原文件里
一共两个数据,是 ...


将最新号码存储在原文件中可以采用两行或者一列的方式,具体取决于你对数据的使用和处理方式。下面给出两种示例代码:

# 两行存储
def save_to_file(number):
    with open('filename.txt', 'w') as f:
        f.write(str(number) + '\n')

# 读取文件中的数据
def read_from_file():
    with open('filename.txt', 'r') as f:
        lines = f.readlines()
        if len(lines) == 2:
            return int(lines[0].strip()), int(lines[1].strip())
        else:
            return None

number = 12345
save_to_file(number)  # 保存最新号码到文件中
print(read_from_file())  # 从文件中读取数据

在这个示例中,我们定义了一个`save_to_file()`函数用于将最新号码写入文件中,在每次保存前会清空原有内容。然后,定义了`read_from_file()`函数来读取文件中的数据。

如果你选择将数据放在两行中,保存时通过换行符`\n`来分隔两个数据。在读取时,使用`readlines()`函数逐行读取所有数据。如果文件中共有两行数据,那么通过`strip()`方法去除两行末尾的换行符,并转换为整数类型返回。

另一种方式是将两个数据放在一列中,用逗号作为分隔符。示例代码如下:

# 一列存储
def save_to_file(number):
    with open('filename.txt', 'w') as f:
        f.write(str(number) + ',')

# 读取文件中的数据
def read_from_file():
    with open('filename.txt', 'r') as f:
        data = f.read().strip()
        if data:
            numbers = data.split(',')
            return int(numbers[0].strip()), int(numbers[1].strip())
        else:
            return None

number = 12345
save_to_file(number)  # 保存最新号码到文件中
print(read_from_file())  # 从文件中读取数据

在这个示例中,我们同样使用`save_to_file()`函数将最新号码写入文件中,每次保存时也会清空原有内容。然后,使用`read_from_file()`函数读取文件中的数据。

如果你选择将两个数据放在一列中,保存时使用逗号`,`作为分隔符。在读取时,通过`split()`方法根据逗号将数据拆分成一个列表,再使用`strip()`方法去除每个数据两端的空格,并将其转换为整数类型返回。

希望这个示范代码能够满足你的需求!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-16 10:55:11 | 显示全部楼层
本帖最后由 jackz007 于 2024-5-16 18:00 编辑

       必须是 ini 文件(Windows 配置文件)啊,受到 Windows 操作系统直接支持的文件类型,备有配套专用的 API 供用户调用。而且,绿色环保无污染,不会在系统中遗留垃圾。是再合适不过的方案。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-17 10:19:40 From FishC Mobile | 显示全部楼层
FishC 发表于 2024-5-16 08:40
如果你想清空文本框中的内容,你可以先使用`pyautogui.hotkey()`函数模拟键盘操作,按下`ctrl + a`选中 ...

以绝对坐标定位网页文本框
有时候定不准,用click点不到
可有好的方案
第一,要用pyautogui
第二。不要用selenium
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 18:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表