Python -在for循环中使用多个str.startswith()来获取它们的特定值

iqxoj9l9  于 2022-11-21  发布在  Python
关注(0)|答案(2)|浏览(114)

下面的函数解析一个目录中的多个csv文件,并使用str.startwith()取出值。
使用'firstline.startswith('TrakPro')'和' txt.startswith('Serial') '可以找到它。但是,当我添加第三个str.startwith(),即txt2.startswith('Test')时,没有任何输出,没有错误,似乎忽略了它。我需要做什么改变?基本上我想在for循环中添加多个str.startwith(),在':“后面拉出各种关键字。

def get_csv_file_list(root):
    for r, d, f in os.walk(root):
        for file in f:

            if file.endswith('.csv'):
                path = os.path.join(r, file)
                dir_name = path.split(os.path.sep)[-2]
                file_name = os.path.basename(file)

                try:
                    with open(path) as k:
                        firstline = k.readline()

                        if firstline.startswith('TrakPro'):
                            file_list.append(path)
                            file_list.append(dir_name)
                            file_list.append(file_name)

                            txt = 'Serial Number:'
                            if txt.startswith('Serial'):
                                for row in list(k)[3:4]:
                                    file_list.append(row[15:26])

                            txt2 = 'Test Name:'
                            if txt2.startswith('Test'):
                                for rows in list(k)[4:5]:
                                    print(rows)
                                    file_list.append(row[11:])

csv如下所示:

TrakPro Version 5.2.0.0 ASCII Data File
Instrument Name:,SidePak
Model Number:,TK0W02
Serial Number:,120k2136005
Test Name:,13270
Start Date:,04/17/2021
Start Time:,01:53:29
Duration (dd:hh:mm:ss):,00:07:13:00
Log Interval (mm:ss):,01:00
Number of points:,433
Description:,

到目前为止,我已经尝试了上面的代码,我希望打印出csv示例的“测试名称”行中的值。该函数没有打印出任何内容,没有错误。
标记

lsmd5eda

lsmd5eda1#

要只打印以Test Name:开头的行的值,可以使用以下代码:

with open("your_file.csv", "r") as f_in:
    for line in map(str.strip, f_in):
        if line.startswith("Test Name:"):
            _, value = line.split(",", maxsplit=1)
            print(value)

印刷品:

13270
kqlmhetl

kqlmhetl2#

正如我在评论中所说的,你是在消费k
要查看发生了什么,请运行以下命令:

file_name = "./abc.csv"
file_list=[]
with open(file_name) as k:
    firstline = k.readline() # Consume first line
    if firstline.startswith('TrakPro'):
        print("First line:\n", firstline)
        file_list.append(file_name)
        txt = list(k) # here k is the file contents minus the first line
        print("Contents of list\n", txt)
        if str(txt[2]).startswith('Serial'):
            file_list.append(str(txt[2])[15:26])
        if str(txt[3]).startswith('Test'):
            file_list.append(str(txt[3].strip())[11:])
print("\nResult:\n",file_list)

其中abc.csv的内容为:

TrakPro Version 5.2.0.0 ASCII Data File
Instrument Name:,SidePak
Model Number:,TK0W02
Serial Number:,120k2136005
Test Name:,13270
Start Date:,04/17/2021
Start Time:,01:53:29
Duration (dd:hh:mm:ss):,00:07:13:00
Log Interval (mm:ss):,01:00
Number of points:,433
Description:,

结果应该是:

First line:
 TrakPro Version 5.2.0.0 ASCII Data File

Contents of list
 ['Instrument Name:,SidePak\n', 'Model Number:,TK0W02\n', 'Serial Number:,120k2136005\n', 'Test Name:,13270\n', 'Start Date:,04/17/2021\n', 'Start Time:,01:53:29\n', 'Duration (dd:hh:mm:ss):,00:07:13:00\n', 'Log Interval (mm:ss):,01:00\n', 'Number of points:,433\n', 'Description:,\n']

Result:
 ['./abc.csv', '120k2136005', '13270']

相关问题