将数据替换为其他fi

2024-10-01 11:26:20 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我们有两个文件:

文件01.txt

101|10075.0|12|24/12/2015
102|1083.33|12|24/12/2015

第二个文件只有一行!

文件02.txt

101|False|Section06

第一个参数在两个文件中相同(唯一)。 我必须用文件02中的一些替换数据文件01。匹配准则是第一个参数(代码)。你知道吗

我有一个输入(代码请求)和两个文件的readlines下一步我需要做什么,我也与列表工作。你知道吗

预期结果:

input = 101

输出应为:

101|False|Section06
102|1083.33|12|24/12/2015

Tags: 文件代码txtfalse列表input参数数据文件
3条回答

您可以使用^{}读取文件,并将它们放入dict中,然后像这样替换键:

import csv
with open('file1') as f:
    d = {i[0]: i[1:] for i in csv.reader(f, delimiter='|')}

with open('file2') as f:
    d.update({i[0]: i[1:] for i in csv.reader(f, delimiter='|')})

d看起来像:

{'101': ['False', 'Section06'], '102': ['1083.33', '12', '24/12/2015']}

要获取例外输出:

>>> ['|'.join([i[0]]+i[1]) for i in d.items()]
['101|False|Section06', '102|1083.33|12|24/12/2015']

如果你想把它们写进一个文件:

with open('file1', 'w') as f:
    for i in d.items():
        f.write('|'.join([i[0]]+i[1]))

解决方案

这适用于给定的示例:

with open('file01.txt') as fobj1, open('file02.txt') as fobj2:
    data1 = fobj1.readlines()
    data2 = fobj2.readline()

code = data2.split('|', 1)[0]

with open('file01.txt', 'w') as fobj_out:
    for line in data1:
        if line.split('|', 1)[0] == code:
            fobj_out.write(data2 + '\n')
        else:
            fobj_out.write(line)

一步一步地

我们打开两个文件进行读取:

with open('file01.txt') as fobj1, open('file02.txt') as fobj2:
    data1 = fobj1.readlines()
    data2 = fobj2.readline()

读取的数据如下所示:

>> data1
['101|10075.0|12|24/12/2015\n', '102|1083.33|12|24/12/2015']

>> data2
'101|False|Section06'

我们只需要来自file02.txt的代码:

>>> code = data2.split('|', 1)[0]
code
'101'

data2.split('|', 1)|处分裂。因为我们只需要一次分裂,我们可以用1来限制它。你知道吗

现在我们再次打开file01.txt。这次写:

with open('file01.txt', 'w') as fobj_out:
    for line in data1:
        if line.split('|', 1)[0] == code:
            fobj_out.write(data2 + '\n')
        else:
            fobj_out.write(line)

这一行if line.split('|', 1)[0] == code:执行与上面相同的拆分,但对file01.txt的所有行都执行。如果代码等于来自file02.txt的代码,我们使用来自file02.txt的行,否则我们只写回file01.txt的行形式。你知道吗

您只需将这两组数据连接成一个pandas.DataFrame(),如下所示:

import pandas as pd

df1 = pd.DataFrame([[10075.0, 12,'24/12/2015'], [1083.33, 12, '24/12/2015']], index=[101,102], columns=['prc', 'code', 'date'])
'''                    
101|10075.0|12|24/12/2015
102|1083.33|12|24/12/2015
'''
df2 = pd.DataFrame([[False, 'Section06'], [True, 'Section07']], index=[101,102], columns=['Bool', 'Section'])
'''
101|False|Section06
102|True|Section07
'''
pd.concat([df1,df2], axis=1, join='outer')

它给出:

          prc  code        date   Bool    Section
101  10075.00    12  24/12/2015  False  Section06
102   1083.33    12  24/12/2015   True  Section07

现在可以去掉不需要的列(例如使用pandas.Drop()

相关问题 更多 >