打开文件名与TSV文件中的ID匹配的文件(从CSV文件转换而来)

hkmswyz6  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(111)

我有一个TSV文件是从CSV文件和一个包含markdown文件的文件夹转换而来的。我想做的是遍历目录中的文件,打开一个文件名(例如,“File_ID_1”)与列(列“ID”)中的值匹配的文件,从中提取其他相关内容(“Animal”和“Fruit”),并将这些内容分别添加到TSV文件的相应列中。

example.tsv

ID   Data   Animal   Fruit
1   August
2   July
3   May
...
File names in a directory 'Desktop/Files':
File_ID_1
File_ID_2
File_ID_3
...
And markdown file looks like this: 
File_ID_1

**Animal**: Cat

**Fruit**: Peach

...
This is what I've gotten so far.
## Extracting relevant contents from a matched md file
import csv
import os
import re

df = 'example.tsv'
directory = 'Desktop/Files'

id_to_row = {}
with open(df, 'r', newline='', encoding='utf-8') as tsv_file:
    tsv_reader = csv.DictReader(tsv_file, delimiter='\t')
    for row_idx, row in enumerate(tsv_reader):
        id_to_row[int(row['ID'])] = row_idx

# Process markdown files
for filename in os.listdir(directory):
    if filename.endswith('.md'):
        id_match = re.match(r'File_ID_(\d+)\.md', filename)
        if id_match:
            file_id = int(id_match.group(1))
            markdown_path = os.path.join(directory, filename)
            
            with open(markdown_path, 'r', encoding='utf-8') as md_file:
                content = md_file.read()

我的同事建议我使用Xpath表达式从文件中提取相关内容,但我还是一个初学者,我不知道如何将所有这些代码放在一起。我希望我的措辞是可以理解的。

eufgjt7s

eufgjt7s1#

我将使用 regex 来提取信息,然后使用pandasupdate.tsv):

import re
from pathlib import Path
import pandas as pd #pip install pandas

d = {}
for fp in Path("Desktop/Files").glob("*.md"):
    with open(fp, "r") as f:
        pat = r"\*\*(.*)\*\*: (.*)"
        d[int(fp.stem.split("_")[-1])] = {
            m.group(1): m.group(2)
            for m in re.finditer(pat, f.read()) if m
        }
    
df = pd.read_table("example.tsv", index_col=0)
df.update(pd.DataFrame(d).T) # to fill in the existing df
df.to_csv("example.tsv", sep="\t") # to overwrite the file

Regex:[ demo ]
example.tsv的输出(* 以表格格式 *):
| ID|数据|动物|水果|
| --|--|--|--|
| 1 |八月|猫|桃|
| 2 |七月|||
| 3 |可以|||

相关问题