我是python的新手,我需要执行一些数据修改。我想就这方面的最佳实践提出一些建议:库,模块,更好的实现代码,或者只是方向。
所以我的文本文件包含以下格式组织的数据:
A:100 B:200 C:300
A:150 B:350 C:370
即。每行代表相关数据,3个变量,名为A / B / C.每个新行显示有关相同变量但与另一个对象相关的数据。
所以我的数据在文本文件中,我想以下列格式输出:
100 '\t' 150
200 '\t' 350
300 '\t' 370
即。变量A,B和C的数据行列表,这样我就可以导出到图形工具包(可能是Origin Pro)。
这是我到目前为止提出的代码:
with open("example.txt", 'r') as file:
for line in file.readlines():
line = line.replace(' ', '\n')
line = line.split(':', 1)[-1]
print line
这会将数据转换为以下内容:
100
B:200
C:300
150
B:350
C:370
由于.split()显然仅在使用.replace()在数据之间添加新行之前在每一行上执行。我觉得在使用.replace()之后,我需要再次开始循环来执行.split()甚至只是迭代地行[2:],以删除主要变量名称 - 但后来我想不到我将如何为每一行创建数据列表以创建列?
有什么想法吗?谢谢!
答案 0 :(得分:0)
显然,您需要一些数据结构来保存变量的值。最合适的是列表字典:
d = {'A': [], 'B': [], 'C': []}
然后,您浏览文件,将每一行拆分为“名称:值”项,然后在:
符号上拆分这些项并显示存储值:
with open("example.txt", 'r') as file:
for line in file:
elements = line.rstrip().split()
for e in elements:
(name, value) = e.split(':')
d[name].append(value)
最后输出数据,每行一个变量:
for k in sorted(d):
print('\t'.join(d[k]))
答案 1 :(得分:0)
我建议使用pandas
库:
import pandas as pd
df = pd.read_csv(path_to_infile, sep=' ', header=None, names=['A', 'B', 'C'])
df = df.applymap(lambda x: int(x[2:]))
df.to_csv(path_to_outfile, sep='\t', header=False, index=False)
在import pandas
之后,您可以使用read_csv
函数将文件加载到数据框中,并添加一些其他参数:
sep
用于声明分隔符header
可用于表示您没有列名称names
用于为列分配名称之后,您可以在整个数据框架上使用applymap
函数来删除变量名称和冒号。
最后,您可以使用to_csv
方法将文件保存到所需位置,同样没有header
,但这次没有index
,因为它会默认添加索引列。
如您所见,您可以再次使用sep
参数声明新的分隔符。
答案 2 :(得分:0)
你可以使用pandas来实现它,这非常简单:
import pandas as pd
df = pd.read_csv(file_path,sep=' ',header=None,names = ['A','B','C'])
output = df.apply(lambda x:x[.str.replace('^([A-Z]:)','')],axis=1).T
output.to_csv(file_path,sep='\t',header = False, index = False)
文件: