首页 > 解决方案 > 如何完成这个 Python 脚本来操作制表符分隔文件中的数据?

问题描述

我在一个制表符分隔的文件中有一个零件号序列号的列表,我需要使用连字符将它们合并在一起以创建一个Asset Number

这是输入

Part Number    Serial Number
PART1          SERIAL1
,PART2         SERIAL2
, PART3        SERIAL3

这就是我想要的输出

Part Number    Serial Number    Asset Number
PART1          SERIAL1          PART1-SERIAL1
,PART2         SERIAL2          PART2-SERIAL2
, PART3        SERIAL3          PART3-SERIAL3

我尝试了以下代码

import csv
input_list = []
with open('Assets.txt', mode='r') as input:
    for row in input:
        field = row.strip().split('\t') #Remove new lines and split at tabs
        for x, i in enumerate(field):
            if i[0] == (','):   #If the start of a field starts with a comma
                field[x][0] = ('') #Replace that first character with nothing
                field[x].lstrip() #Strip any whitespace
        print(field)

这段代码产生了实际的输出

['Part Number', 'Serial Number']
['PART1', 'SERIAL1']
['",PART2"', 'SERIAL2']
['", PART3"', 'SERIAL3']

我的第一个问题是我从所有字段开头删除逗号和空格的代码无法正常工作。

第二个问题是空格中添加了引号。

第三个问题是我不知道如何将另一个项目添加到列表数组(资产编号)中,因此我可以加入这些字段。

有人能帮我解决这些问题吗?

标签: python-3.xlistdelimiter

解决方案


import pandas as pd

data = {'Part Number': ['PART1',', PART2',',  PART3'],
        'Serial Number': ['Serial1','Serial2','Serial3']}

df = pd.DataFrame(data)

df.loc[:,'AssetNumber'] = df.loc[:,'Part Number'].apply(lambda x: str(x).strip().replace(',','')) + '-' + df.loc[:,'Serial Number'].apply(lambda x: str(x).strip().replace(',',''))

这会做你想做的

在您处理 CSV 调用时

df = pd.read_csv('filepathasstring',sep='\t')

如果您有问题,请检查此问题是否与行有关:

使用 Pandas 读取制表符分隔的文件 - 适用于 Windows,但不适用于 Mac

然后你可以通过调用保存为制表符分隔:

df.to_csv('filepathasstring', sep='\t')

如果你还没有熊猫,这里是如何获得它的:

https://pandas.pydata.org/pandas-docs/stable/install.html


推荐阅读