저는 python에 익숙하지 않아 search_max.py라는 이름의 Python 스크립트에 약간의 도움이 필요합니다.입력 파일 데이터에서 최대 및 최소 문제를 해결하는 문제
파일 "xyz"형식을 연 다음 각 coord의 최소 및 최대를 검색합니다. 문제는 awk 스크립트와 동일한 작업을 수행 할 때 동일한 재구성 결과를 얻지 못하는 경우입니다.
데이터 형식이나 문자열 연산에 문제가 있는지 궁금합니다. 누구든지이 문제를 해결할 수 있습니까?
파이썬 스크립트 :
#!/usr/bin/python
# -*- coding: iso-8859-15 -*-
inputfile = "peamorphe.xyz"
outputfile = "result.txt"
# open the input file
infile = open(inputfile, "r")
# read line 1 : number of atoms
atomsno = infile.readline().rstrip('\n').split(" ")
# read line 2 : name of the system
systemname = infile.readline().rstrip('\n')
# read line 3 : initialisation for min and max
temp2 = infile.readline().rstrip('\n').split(" ")
zmin = temp2[3]
zmax = temp2[3]
ymax = temp2[2]
ymin = temp2[2]
xmax = temp2[1]
xmin = temp2[1]
lineno = 3
print zmax, ymin, xmin
# read other lines
for ligne in infile.readlines():
lineno = lineno + 1
# extraction and strip of data spaced by " "
data = ligne.rstrip('\n\r').split(" ")
# Conditions for min and max
if data[1] < xmin:
xmin = data[1]
wclxmin = lineno
if data[1] > xmax:
xmax = data[1]
wclxmax = lineno
if data[2] < ymin:
ymin = data[2]
wclymin = lineno
if data[2] > ymax:
ymax = data[2]
wclymax = lineno
if data[3] < zmin:
zmin = data[3]
wclzmin = lineno
if data[3] > zmax:
zmax = data[3]
wclzmax = lineno
# Evaluation of centers
zcenter = float(zmax)-float(zmin)
ycenter = float(ymax)-float(ymin)
xcenter = float(xmax)-float(xmin)
# open the input file
infile = open(inputfile, "r")
# read line 1 : number of atoms
atomsno = infile.readline().rstrip('\n').split(" ")
# read line 2 : name of the system
systemname = infile.readline().rstrip('\n')
# read line 3 : initialisation for min and max
temp2 = infile.readline().rstrip('\n').split(" ")
zmin = temp2[3]
zmax = temp2[3]
ymax = temp2[2]
ymin = temp2[2]
xmax = temp2[1]
xmin = temp2[1]
lineno = 3
print zmax, ymin, xmin
# read other lines
for ligne in infile.readlines():
lineno = lineno + 1
# extraction and strip of data spaced by " "
data = ligne.rstrip('\n\r').split(" ")
# Conditions for min and max
if data[1] < xmin:
xmin = data[1]
wclxmin = lineno
if data[1] > xmax:
xmax = data[1]
wclxmax = lineno
if data[2] < ymin:
ymin = data[2]
wclymin = lineno
if data[2] > ymax:
ymax = data[2]
wclymax = lineno
if data[3] < zmin:
zmin = data[3]
wclzmin = lineno
if data[3] > zmax:
zmax = data[3]
wclzmax = lineno
# Evaluation of centers
zcenter = float(zmax)-float(zmin)
ycenter = float(ymax)-float(ymin)
xcenter = float(xmax)-float(xmin)
awk 스크립트는 :
peamorphe.xyz가 사전에 Exilien 감사 :
#!/usr/bin/awk -f
# from a xyz file
BEGIN{
xmax;xmin;
zmax;zmin;
ymax;ymin;
xcent;ycent;zcent;
xcent = (xmax-xmin)/2;
ycent = (ymax-ymin)/2;
zcent = (zmax-zmin)/2;
print "At the start of the script";
print "xmax = " xmax "; " "xmin = " xmin "; xcent = " xcent;
print "ymax = " ymax "; " "ymin = " ymin "; ycent = " ycent;
print "zmax = " zmax "; " "zmin = " zmin "; zcent = " zcent;
print "";
}
{
if (xmax<$2) xmax = $2
if (xmin>$2) xmin = $2
if (ymax<$3) ymax = $3
if (ymin>$3) ymin = $3
if (zmax<$4) zmax = $4
if (zmin>$4) zmin = $4
}
END{
xcent = (xmax-xmin)/2;
ycent = (ymax-ymin)/2;
zcent = (zmax-zmin)/2;
print "At the end of the script";
print "xmax = " xmax "; " "xmin = " xmin "; xcent = " xcent;
print "ymax = " ymax "; " "ymin = " ymin "; ycent = " ycent;
print "zmax = " zmax "; " "zmin = " zmin "; zcent = " zcent}
당신은 여기 내 입력 파일 (십사일)를 다운로드 할 수 있습니다.
파이썬에서는 숫자가 아닌 문자열 인'data [...] '를 비교합니다. 먼저 float()해야하며 그렇지 않으면'999> 1000'입니다. – eumiro