Python - Glob - 根据文件名读入.csv数据,并根据文件名用颜色绘制数据

Python - Glob - Reading in .csv data according to filename, and plotting data with color according to the filename

我正在将 .csv 格式的多个数据记录器文件读入 Python。我的objective如下:

我卡在哪里:

只需使用 [] 范围作为起始字符:

import glob

for name in glob.glob('[K,Z]*.csv'):
    if name.startswith('K'):
        color = 'r'
    elif name.startswith('K'):
        color = 'g'
    else:
        color = 'k'
    # the rest of the code <...>

不过好像glob可以区分大小写,不区分大小写depending on the system

所以,也许更好的解决方案是使用 re 模块:

import os
import re

regex = '?P<key>(K|Z).*\.scv'
for fname in os.listdir(path):
    search = re.search(regex, fname)
    if search:
        if search.group('key') == 'K':
            color = 'r'
        elif search.group('key') == 'Z':
            color = 'g'
        else:
            color = 'k'
    
# rest of the code <...>

(目前唯一的)其他答案似乎很简单,但是,我建议为您的绘图创建一个函数,而不是在长 for 循环中嵌套大量 if 语句。

下面是一个简单的函数,它采用 filename(从中加载数据)、要绘制的 ax 以及您希望绘图具有的 color ..


import pandas as pd
import matplotlib.pyplot as plt
from glob import glob

filenamesK = glob("C:/Users/K*.csv")
filenamesZ = glob("C:/Users/Z*.csv")

def plot_data(filename, fig_ax, color):
    df = pd.read_csv(filename, sep=',',skiprows=24)
    df.columns=['sample','Time','ms','Temperature',]
    df=df.astype(str)

    df["Temperature"] = df["Temperature"].str.replace('\+ ', '').str.replace(' ', '').astype(float)

    # no need for this:
    # color = next(fig_ax._get_lines.prop_cycler)['color']

    fig_ax.plot(df[["Temperature"]], color=color)


fig, ax = plt.subplots()

for f in filenamesK:
    plot_data(f, ax, 'blue')

for f in filenamesZ:
    plot_data(f, ax, 'red')

plt.show()

这可以通过提取另一个用于读取数据的函数来进一步改进(在可读性方面)。也就是说,一种用于从给定文件中读取数据,另一种用于绘制数据。