Python程序在尝试读取只有200k行数据的CSV文件时会冻结我的计算机

2024-06-02 10:29:36 发布

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

我是Python的初学者,我面临一个问题。我希望用户选择要读取的CSV文件。如果程序无法定位文件或处理该条件,则应默认为错误

我已经成功地为较小的文件大小(<;50000行)实施了此解决方案,但当选定的文件变大(e.x.>;50000行)时,程序将冻结

以下是需要考虑的一些特征:

  1. 我的电脑有8GB内存
  2. 选定的文件只有200k+行,这不被视为“大数据”

以下是我在实现方面的尝试:

def File_DATALOG():
    global df_LOG
    try:
        dataloggerfile = tk.filedialog.askopenfilename(parent=root,
                                                       title='Choose Logger File',
                                                       filetype=(("csv files", "*.csv"),
                                                                 ("All Files", "*.*")))

        if len(dataloggerfile) == 0:
            return None

        lb.insert(tk.END, dataloggerfile)
        if dataloggerfile[-4:] == ".csv":
            df_LOG = pd.DataFrame(pd.read_csv(dataloggerfile))
            if 'Unnamed: 1' in df_LOG.columns:
                df_LOG = pd.DataFrame(pd.read_csv(dataloggerfile, skiprows=5, low_memory=False))
        else:
            df_LOG = pd.DataFrame(pd.read_excel(dataloggerfile, skiprows=5))

        df_LOG.rename(columns={'Date/Time': 'DateTime'}, inplace=True)
        df_LOG.drop_duplicates(subset=None, keep=False, inplace=True)
        df_LOG['DateTime'] = df_LOG['DateTime'].apply(lambda x: insert_space(x, 19))
        df_LOG['DateTime'] = pd.to_datetime(df_LOG['DateTime'], dayfirst=False, errors='coerce')
        df_LOG.sort_values('DateTime', inplace=True)
        df_LOG = df_LOG[~df_LOG.DateTime.duplicated(keep='first')]
        df_LOG = df_LOG.set_index('DateTime').resample('1S').pad()
        print(df_LOG)
        columnsDict['Logger'] = df_LOG.columns.to_list()

    except Exception as ex:
        tk.messagebox.showerror(title="Title", message=ex)
        return None

Tags: columns文件csvnonelogfalsedataframedf