Python 将数据替换到不同的文件
首先,我们有两个文件: file01.txt 第二个文件只有一行强> file02.txt 第一个参数在两个文件中相同(唯一)。 我必须用file02中的一些替换数据file01。匹配条件是第一个参数(代码) 我有一个输入(代码请求)和两个文件的阅读行,下一步我需要做什么,我也在处理列表 预期结果:Python 将数据替换到不同的文件,python,file,Python,File,首先,我们有两个文件: file01.txt 第二个文件只有一行 file02.txt 第一个参数在两个文件中相同(唯一)。 我必须用file02中的一些替换数据file01。匹配条件是第一个参数(代码) 我有一个输入(代码请求)和两个文件的阅读行,下一步我需要做什么,我也在处理列表 预期结果: input = 101 输出应为: 101|False|Section06 102|1083.33|12|24/12/2015 您可以使用读取文件,并将其放入dict中,然后按如下方式替换密钥: i
input = 101
输出应为:
101|False|Section06
102|1083.33|12|24/12/2015
您可以使用读取文件,并将其放入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='|')})
>> data1
['101|10075.0|12|24/12/2015\n', '102|1083.33|12|24/12/2015']
>> data2
'101|False|Section06'
而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]))
您只需将两组数据连接成一个
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()
)解决方案
这适用于给定的示例:
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()
读取的数据如下所示:
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='|')})
>> 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)
如果line.split(“|”,1)[0]==code:执行与上述相同的拆分,但对
file01.txt
的所有行执行此拆分。如果代码等于file02.txt
中的代码,我们使用file02.txt
中的行,否则我们只需将行形式file01.txt
写回。你是什么意思?是否用第二个文件替换第一个文件?为什么不直接复制粘贴…哈哈有趣?不,我的程序必须这样做,因为我有两个文件的表格,可以看到两个文件的终端数据。完全不清楚你在问什么。在你的问题中向我们展示你的预期结果。我想知道如果你必须将修改过的表格写回文件1,时间复杂度是否太高。我在上面说过,我正在处理列表,你能告诉我这里的每一行都做了什么吗?这些文件只是示例,我的行相当大,我必须将它隔离在某个临时文件中,并逐部分更改,然后写回同一位置的旧文件。拆分(“|”,1)。对于什么是“1”?它在|
处拆分,但只拆分一次:['101',False | Section06']'
。问题是,对于某些行,我们需要列的某个子集,而对于其他行,我们需要另一个子集。自从我首先阅读并回答后,OP对其问题做了很大的更改。啊。。