Python:在不同的进程中循环一定的时间

2024-03-29 11:28:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个脚本,它将使用Tkinter来选择和加载文件,并将其内容存储在不同的对象中,然后处理每个文档。 我想让脚本只能处理由一个问题确定的一定数量的文档(值存储在“文件\编号”下) 例如:如果在问“你想比较多少个文件?” 用户输入3 我想在tkinter openfile窗口只要求3个文件,然后继续

我使用下面的If-Else语句 但它似乎没有很好的工作和代码真的不是pythonic。 有没有更好/更短的方法来执行相同的操作?你知道吗

谢谢

我的剧本是这样的

import pandas as pd
from pandas import *
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns
import pylab
import pandas.io.data
import os
import Tkinter
from Tkinter import *
import tkFileDialog
import tkSimpleDialog
from tkFileDialog import askopenfilename
import sys

# Set up GUI
root = Tkinter.Tk(); root.withdraw()

# Prompt for user info
File_number = tkSimpleDialog.askinteger("File number", "How many files do you want to compare?")


# Prompt for file explorer
# Also extract the file_name

process_a = 0

if process_a = File_number:
    break
else:
    process_a = process_a + 1
    fileloc1 = tkFileDialog.askopenfilename(parent=root, title='Choose file 1')
    fileloc1_name_clean = os.path.splitext(fileloc1)[0]
    fileloc1_name = os.path.basename(fileloc1_name_clean)

if process_a = File_number:
    break
else:
    process_a = process_a + 1
    fileloc2 = tkFileDialog.askopenfilename(parent=root, title='Choose file 2')
    fileloc2_name_clean = os.path.splitext(fileloc2)[0]
    fileloc2_name = os.path.basename(fileloc2_name_clean)

if process_a = File_number:
    break
else:
    process_a = process_a + 1
    fileloc3 = tkFileDialog.askopenfilename(parent=root, title='Choose file 3')
    fileloc3_name_clean = os.path.splitext(fileloc3)[0]
    fileloc3_name = os.path.basename(fileloc3_name_clean)
编辑1
The next part of my script is:

dfa_1 = pd.read_csv(fileloc1, delimiter='\t')
dfa_nodupli = dfa_1.drop_duplicates(cols='N', take_last=False)    
dfa_nodu_2pep = dfa_nodupli[(dfa_nodupli['Peptides(95%)'] > 1)]   
dfa_nodu_2pep = dfa_nodu_2pep[~dfa_nodu_2pep['Name'].str.contains('Keratin')]
dfa_nodu_2pep.to_csv(fileloc1_name + ".csv")



dfb_1 = pd.read_csv(fileloc2, delimiter='\t')
dfb_nodupli = dfb_1.drop_duplicates(cols='N', take_last=False)    
dfb_nodu_2pep = dfb_nodupli[(dfb_nodupli['Peptides(95%)'] > 1)]   
dfb_nodu_2pep = dfb_nodu_2pep[~dfb_nodu_2pep['Name'].str.contains('Keratin')]
dfb_nodu_2pep.to_csv(fileloc2_name + ".csv")

Tags: csvpathnameimportcleanosrootprocess
1条回答
网友
1楼 · 发布于 2024-03-29 11:28:37

我修改了你的代码,使它工作,以一种你想要的方式(我希望)。你知道吗

import Tkinter
import tkFileDialog
import tkSimpleDialog
from tkFileDialog import askopenfilename
import os

# Set up GUI


def main():

    root = Tkinter.Tk(); 
    root.withdraw()

    # Prompt for user info
    File_number = tkSimpleDialog.askinteger("File number", 
                                            "How many files do you want to compare?")

    if not File_number:
        return

    user_fiels = []


    max_file_no = int(File_number)
    current_file = 1;

    while(current_file <= max_file_no):

        fileloc = tkFileDialog.askopenfilename(parent=root, title='Choose file {}'.format(current_file))

        if not fileloc:
            continue

        fileloc_name_clean = os.path.splitext(fileloc)[0]
        fileloc_name = os.path.basename(fileloc_name_clean)

        user_fiels.append([fileloc, fileloc_name_clean, fileloc_name])

        current_file += 1

        #print(fileloc_name_clean, fileloc_name)

    print(user_fiels) 

main()

我使用while循环获取文件路径的次数可以是您想要的次数。你知道吗

相关问题 更多 >