首页 > 解决方案 > python脚本排除csv单元格数据的特定字段

问题描述

使用 python 我正在尝试使用现有数据创建摘要,csv并发现从其中一个单元格中提取数据的困难。

输入 csv 文件 在此处输入图像描述

我只想包含来自 info 4 列的城市名称和文件路径,并期望摘要如下 -AlexxxxxyyyyzzzzzNewyork\Folder1\Folder2\Test.txt

编码

csv_data_out[csv_line_out].append(conten[Name])
csv_data_out[csv_line_out].append(conten[info 1])
csv_data_out[csv_line_out].append(conten[info 2])
csv_data_out[csv_line_out].append(conten[info 3])
csv_data_out[csv_line_out].append(conten[info 4])
csv_summary = ("".join(csv_data_out[csv_line_out]))

with open(outputfile, 'wb') as newfile:
   writer = csv.writer(newfile, delimiter = ';')
   writer.writerow(csv_columns_out[:])
   writer.writerows(csv_data_out)
newfile.close()

任何想法只从 info 4 col 获取所需的详细信息?

标签: pythoncsv

解决方案


本质上,您在 csv 中有一个 csv。没有发布信息来给出完整的答案,但这是其中的大部分。

您可以使用 io.StringIO (或 io.BytesIO 如果是字节字符串)获取一个字符串并将其作为 csv 处理。

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import csv
from io import StringIO

# Create somewhere to put the inputs in case needed later
stored_items = []

with open('data.csv', 'r') as csvfile:
    inputs = csv.reader(csvfile)
    
    # skip the header row
    next(inputs)
    
    for row in inputs:
        # Extract the Info 4 column for processing
        f = StringIO(row[4])
        string_file = csv.reader(f,quotechar='"')
        build_string = ""
        for string_row in string_file:
            build_string =  f"{string_row[0]}{string_row[1]}"
        # Merge everything into a summary
        summary_string = f"{row[0]}{row[1]}{row[2]}{row[3]}{build_string}"
        # Add all the data back to storage
        stored_items.append((row[0],row[1],row[2],row[3],row[4],summary_string))
        print(summary_string)

我之所以说没有足够的信息张贴在其中的原因是,例如,该位置将始终是(a) 可以具有固定文本替换的位置,还是有条件的,例如它可能是(a) (b) 在这种情况下可能需要正则表达式。(除非绝对必要,否则我的偏好是不使用正则表达式)。此外,您是否总是在前两个术语之后Info 4,或者这些术语会在文本中的不同位置找到等等。如果没有看到更多的数据样本,就不可能明确回答。


推荐阅读