当前位置: 首页 > 知识库问答 >
问题:

如何在一段时间循环之前一劳永逸地提示用户输入?

燕涵容
2023-03-14

我正在编写一个Python脚本,它从名为“read_file”的熊猫数据帧中获取特定数据,并将其写入csv文件。为此,我循环遍历DataFrame的行,直到满足某个条件,也就是说,我将数据放入字典中,然后使用“To_csv”函数更新csv文件。当然,执行同一件事情的方法更少,也更简单,但我将把优化留到另一天(尽管我愿意接受建议)。

我想知道是否有一种方法可以提示用户决定他们想要写数据的方式。基本上,我是在问他们是否愿意:

  1. 覆盖文件,然后通过to_csv函数的追加模式逐行更新它(每次我们通过循环)
  2. 不覆盖文件,只是在每次运行脚本时向其附加数据(这意味着它在运行后变得更大)。

到目前为止,我的代码如下所示:

i = 0
for index, row in read_file.iterrows():
case = row['Case']
first = case.split('-')[0]
second = case.split('-')[1]
third = case.split('-')[2]
fourth = case.split('-')[3]
fifth = case.split('-')[4]
if first == 'X01': # if1
    if second == '01': # if2
        if fourth == '04': # if3
            i += 1
            Ax = float(row['Ax'])
            Ay = float(row['Ay'])
            Az = float(row['Az'])
            ENT = float(row['ENT'])
            Ips = (Ax**2 + Ay**2 + Az**2)**(0.5)
            beta = float(row['beta'])
            date = row['Date'].replace("/", "-")
            totalP = float(row['Total.P'])

            data = pd.DataFrame({'Case': [str(case)],
                'ENT': [ENT],
                'total P': [totalP]},
                index = [i])

            filename = 'curve_{}-{}-{}-{}_I{}-B{}-D{}.csv'.format(first,second,third,fourth,round(Ips, 2),beta,date)
            if os.path.getsize(filename):
                print('Curve file not empty.')
                while True:
                    inp = input('Do you want to: A) Append the file. B) Overwrite the file. [A/B]? : ')
                    if inp in ['A', 'B']:
                        break
                if inp == 'A':
                    print('Appending... ')
                    data.to_csv(filename, mode='a')
                elif inp == 'B':
                    print('Overwriting... ')
                    data.to_csv(filename, mode='w')

但是,每次条件 if1、if2

谢谢

编辑:

示例文件为:

预期输出为:

共有1个答案

帅煌
2023-03-14

在循环访问文件之前向用户询问问题,这样问题只会被问(和回答)一次:

while True:
    inp = input('Do you want to: A) Append the file. B) Overwrite the file. [A/B]? : ')
    if inp in ['A', 'B']:
        break

i = 0
for index, row in read_file.iterrows():
case = row['Case']
first = case.split('-')[0]
second = case.split('-')[1]
third = case.split('-')[2]
fourth = case.split('-')[3]
fifth = case.split('-')[4]
if first == 'X01': # if1
    if second == '01': # if2
        if fourth == '04': # if3
            i += 1
            Ax = float(row['Ax'])
            Ay = float(row['Ay'])
            Az = float(row['Az'])
            ENT = float(row['ENT'])
            Ips = (Ax**2 + Ay**2 + Az**2)**(0.5)
            beta = float(row['beta'])
            date = row['Date'].replace("/", "-")
            totalP = float(row['Total.P'])

            data = pd.DataFrame({'Case': [str(case)],
                'ENT': [ENT],
                'total P': [totalP]},
                index = [i])

            filename = 'curve_{}-{}-{}-{}_I{}-B{}-D{}.csv'.format(first,second,third,fourth,round(Ips, 2),beta,date)
            if os.path.getsize(filename):
                print('Curve file not empty.')
                if inp == 'A':
                    print('Appending... ')
                    data.to_csv(filename, mode='a')
                elif inp == 'B':
                    print('Overwriting... ')
                    data.to_csv(filename, mode='w')
 类似资料:
  • 我在StackOverflow上搜索了很多关于在Android环境中使用上下文的解释,但我只找到了零散的解释片段。 何时应该使用而不是?这个问题详细说明如下。 在和其他中:创建、构建、实例化...需要上下文。我们应该使用还是? 并且如果这些操作是在而不是片段中编写的? 顺便说一下,通过调用和,可能会发生空异常和/或内存泄漏:何时?更准确地说:是否只有当调用方的生存期是被调用对象生存期的(严格)子集

  • 问题内容: 我正在使用MSSQL Server 2008 R2,当我偶然发现索引视图时,我正在尝试优化视图。不幸的是,我的大多数视图都使用左外部联接,而索引视图不支持这种联接。经过一堆研究,让我感到困惑的是最好的解决方法。我看到的方式有以下几种选择: 1) 使用技巧将左联接转换为内部联接,以使用“ OR(IsNull(a)AND IsNull(b))”模拟左联接 我在几个地方找到了该解决方案,但是

  • //基本上我需要提示用户输入等级,并计算A的B的数量等等。我不知道如何让循环在每个用户输入中循环一次。它只是垃圾邮件输入考试成绩。编辑谢谢大家的帮助我想通了! }

  • 在Ruby on Rails中,有一个特性允许您使用任何日期并打印出它是多么“久远”。 例如: 在Java有什么简单的方法可以做到这一点吗?

  • 问题内容: 尝试以0到100之间的整数形式获取用户输入,并提示用户“重试”,只要他们的输入不符合此条件。 到目前为止,我的代码在实现我的目标方面有些成功: 如您所见,程序将检查输入是否为int。一旦用户成功输入一个int值,程序就会检查以确保其输入值在0到100之间。当用户响应第二个提示(由第二个while循环启动)输入一个非int值时,就会出现问题。下面是一个示例: 这么长的话来说,我想知道是否