使用Python重新排列.txt行和列
我是一个非常新手的程序员,需要帮助组合和重新排列大量的.txt数据。我有500个文本文件(实际上有.pts文件,但这似乎和.txt是一样的),其中包含从使用CLM Facetracker的人的照片中提取的面部地标坐标。每张照片的输出如下(向下68行): 版本:1 n点数:68 { 216.512 146.425 217.526166.783 219.63 187.059 (……) } 这相当于: x1,y1 x2,y2 我希望重新排列它,这样所有68个地标坐标都在一行中,每个坐标之间都有一个逗号: 216.512、146.425、217.526166.783219.63187.059 x1,y1,x2,y2 有没有一个简单的方法可以做到这一点?理想情况下,我还希望添加零,以便所有地标坐标都具有相同的小数位数。提前感谢,如果我遗漏了一些非常明显的东西,请道歉:) 如果你想有一定数量的小数点,比如说4:使用Python重新排列.txt行和列,python,text,rows,Python,Text,Rows,我是一个非常新手的程序员,需要帮助组合和重新排列大量的.txt数据。我有500个文本文件(实际上有.pts文件,但这似乎和.txt是一样的),其中包含从使用CLM Facetracker的人的照片中提取的面部地标坐标。每张照片的输出如下(向下68行): 版本:1 n点数:68 { 216.512 146.425 217.526166.783 219.63 187.059 (……) } 这相当于: x1,y1 x2,y2 我希望重新排列它,这样所有68个地标坐标都在一行中,每个坐标之间都有一个逗号
with open(filename, "r") as f:
values = map(float, f.read().split())
s = []
for v in values:
s.append("{:.4f}".format(v))
print(", ".join(s))
如果你想有一定数量的小数点,比如说4:
with open(filename, "r") as f:
values = map(float, f.read().split())
s = []
for v in values:
s.append("{:.4f}".format(v))
print(", ".join(s))
使用文本编辑器的搜索和替换功能,该功能支持特殊字符(空格、cr、lf)。我也能做到(还有许多其他人)
使用文本编辑器的搜索和替换功能,该功能支持特殊字符(空格、cr、lf)。我也能做到(和其他许多人一样)。不是每个答案都能用真实的输入文件。实际上,我理解包含
npoints:68{
等。所以,让我试试
输入文件:
version: 1
npoints: 68 {
216.512 146.425
217.526 166.783
219.63 187.059
}
看起来圆点只作为小数点出现。我假设
输出:
216.512、146.425、217.526166.783219.63187.059
纯sed:
sed-E:a;N;$!ba;s/\N//g;s/[^^0-9^.]///g;s/[^0-9]+[^.]+[^0-9][]///g;s/[]+$///g;'testData
这可能不是美,但好吧……我只需要检查一下我是否还记得正则表达式。看起来我应该改进它,但至少——它是有效的
Python:
with open("testData.txt", "r") as f:
data = f.read().split()
data = [ x for x in data if "." in x ]
print(", ".join(data))
并不是每个答案都能用真实的输入文件。通过真实,我理解包含
npoints:68{
等。所以,让我试试
输入文件:
version: 1
npoints: 68 {
216.512 146.425
217.526 166.783
219.63 187.059
}
看起来圆点只作为小数点出现。我假设
输出:
216.512、146.425、217.526166.783219.63187.059
纯sed:
sed-E:a;N;$!ba;s/\N//g;s/[^^0-9^.]///g;s/[^0-9]+[^.]+[^0-9][]///g;s/[]+$///g;'testData
这可能不是美,但好吧……我只需要检查一下我是否还记得正则表达式。看起来我应该改进它,但至少——它是有效的
Python:
with open("testData.txt", "r") as f:
data = f.read().split()
data = [ x for x in data if "." in x ]
print(", ".join(data))
你真的需要python吗?你可能有Linux吗?这就像awk手册;)不需要python不:)只是默认为那样,因为我的项目管道的其余部分使用python,这就是我的slim体验。不幸的是,没有Linux。肯定只使用awk.:)你真的需要python吗?你可能有Linux吗?这就像来自awk手册;)不需要Python否:)只是默认为那样,因为我的项目管道的其余部分使用Python,这正是我的超薄体验所在。不幸的是,没有Linux。肯定只需要使用awk即可。:)非常感谢。除了将#格式设置为小数点后3位之外,我的一切都正常工作了。它返回:data#u list=[”{0:.3f}”.data_list]Traceback中dl的格式(float(dl))(最近一次调用最后一次):文件“”,第1行,文件“”,第1行,值中错误:无法将字符串转换为float:'version:'我可能缺少一些明显的内容,如果您有空字符串、空格、换行符等,则
float()
将引发错误。您需要清理列表理解中的数据。或者您可以添加一个try:except块来跳过无效数据。非常感谢。除#格式保留到小数点后3位外,我已使所有内容正常工作。它返回:data#list=[“{0:.3f}”。data#list]回溯中dl的格式(float(dl))(最近一次调用最后一次):文件“”,第1行,在文件“”中,第1行,在ValueError:无法将字符串转换为float:“version:'我可能缺少一些明显的内容。如果您有空字符串、空格、换行符等,则float()
将抛出错误。您需要清理列表中的数据。或者您可以添加try:except块以跳过无效数据。