<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Exporting/extracting HEC-RAS data using Python in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/exporting-extracting-hec-ras-data-using-python/m-p/220329#M17002</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I work with hundreds of HEC-RAS models, and typically I would open each one up to copy/paste a user-defined output table to a spreadsheet.&amp;nbsp; Then use some Visual Basic to manipulate to a way I want it - so time consuming!&amp;nbsp; Well, I've been making small programs with Python for the last few months and I want to experiment with HEC-RAS and see what I can figure out.&amp;nbsp; So my question is how do I go about extracting cross section data from a HEC-RAS model?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is there a HEC-RAS python module I don't know about?&amp;nbsp; Do I have to 'hack' into the HEC-RAS program or .SDF export file?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've always thought how incredible it would be to automate an export process, and I feel like there's got to be a way.&amp;nbsp; Any help or suggestions to lead me the right way is greatly appreciated.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 08 Feb 2013 13:16:21 GMT</pubDate>
    <dc:creator>ShaunCavey</dc:creator>
    <dc:date>2013-02-08T13:16:21Z</dc:date>
    <item>
      <title>Exporting/extracting HEC-RAS data using Python</title>
      <link>https://community.esri.com/t5/python-questions/exporting-extracting-hec-ras-data-using-python/m-p/220329#M17002</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I work with hundreds of HEC-RAS models, and typically I would open each one up to copy/paste a user-defined output table to a spreadsheet.&amp;nbsp; Then use some Visual Basic to manipulate to a way I want it - so time consuming!&amp;nbsp; Well, I've been making small programs with Python for the last few months and I want to experiment with HEC-RAS and see what I can figure out.&amp;nbsp; So my question is how do I go about extracting cross section data from a HEC-RAS model?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is there a HEC-RAS python module I don't know about?&amp;nbsp; Do I have to 'hack' into the HEC-RAS program or .SDF export file?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've always thought how incredible it would be to automate an export process, and I feel like there's got to be a way.&amp;nbsp; Any help or suggestions to lead me the right way is greatly appreciated.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 08 Feb 2013 13:16:21 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/exporting-extracting-hec-ras-data-using-python/m-p/220329#M17002</guid>
      <dc:creator>ShaunCavey</dc:creator>
      <dc:date>2013-02-08T13:16:21Z</dc:date>
    </item>
    <item>
      <title>Re: Exporting/extracting HEC-RAS data using Python</title>
      <link>https://community.esri.com/t5/python-questions/exporting-extracting-hec-ras-data-using-python/m-p/220330#M17003</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Update:&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Had sort of an epiphany the other day and noticed that if you changed the prj, geometry, flow, or plan files to a text file then they are perfectly legible to read in as input cards.&amp;nbsp; Never really thought it about like this, but I guess that's how the HEC-RAS program works.&amp;nbsp; Probably just reads in these input cards, and searches for keywords to store the appropriate input values in the right variables.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Reading input lines from a text file and storing info in different variables when keywords are flagged isn't difficult.&amp;nbsp; But the shear amount of different keywords and variables is crazy I feel.&amp;nbsp; With this is in mind, I emailed the ACOE to see if I could get their source code for reading the input files only.&amp;nbsp; No response yet.&amp;nbsp; It also crossed my mind that maybe I could file a request under the Freedom of Information Act.&amp;nbsp; I don't think I'd be able to get the "brains" of the HEC-RAS program, but I feel receiving code that reads the input files and stores it into its separate variables would be game.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 19 Feb 2013 12:43:34 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/exporting-extracting-hec-ras-data-using-python/m-p/220330#M17003</guid>
      <dc:creator>ShaunCavey</dc:creator>
      <dc:date>2013-02-19T12:43:34Z</dc:date>
    </item>
    <item>
      <title>Re: Exporting/extracting HEC-RAS data using Python</title>
      <link>https://community.esri.com/t5/python-questions/exporting-extracting-hec-ras-data-using-python/m-p/220331#M17004</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Try the code below, it should give you a general idea of how you can approach this.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;You'd need to point the "folderLocation" variable in the code below to the folder path and the code will spit out a csv file with details extracted from Hec-RAS geometry files.&lt;/SPAN&gt;&lt;BR /&gt;&lt;A href="https://gist.github.com/anonymous/df899701271a62ff4543#file-gistfile1-py" rel="nofollow noopener noreferrer" target="_blank"&gt;https://gist.github.com/anonymous/df899701271a62ff4543#file-gistfile1-py&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
########################################################################
import os
import re
import time
import csv
from operator import floordiv


folderLocation = "x:\folderlocation\Models"
listSubFolders = os.listdir(folderLocation)
flowChangeLocationsTable = []
streamGeometry = {}
for subFolder in listSubFolders:
&amp;nbsp;&amp;nbsp;&amp;nbsp; subFolderPath = folderLocation + "\\" + subFolder
&amp;nbsp;&amp;nbsp;&amp;nbsp; if os.path.isdir(subFolderPath):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; listSubFolderFiles = os.listdir(subFolderPath)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for file in listSubFolderFiles:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Geometry files in hecras have a ".g0*" extension, the code below filters to look that geometry files only
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if file.find(".g") != -1:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; openFile = open(subFolderPath + "\\" + file, "r")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; readFile= openFile.read()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pattern1 = re.compile(r"Type RM Length L Ch R =.+\n")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pattern2 = re.compile("(?&amp;lt;=\n#Mann=).+(?![A-z]+)")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pattern3 = re.compile(r"(?&amp;lt;=Type RM Length L Ch R =).+(\d+)")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; manningsCoeff = pattern2.finditer(readFile)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stations = pattern3.finditer(readFile)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stationsList = []
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for station in stations:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if int(station.group().split(",")[0].strip()) == 1:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stationsList.append(station.group().split())
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; manningsCoeffList = []
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for coeffs in manningsCoeff:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; numberOfIter = floordiv(int(coeffs.group().split(",")[0])-1, 3) + 1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newStartLocation = coeffs.start() + readFile[coeffs.start():].find("\n") + 1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TempList = []
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while numberOfIter &amp;gt; 0:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; line = readFile[newStartLocation:newStartLocation + readFile[newStartLocation:].find("\n")]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newStartLocation = newStartLocation + readFile[newStartLocation:].find("\n") + 1 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; numberOfIter = numberOfIter - 1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for item in line.split():
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TempList.append(item)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; manningsCoeffList.append(TempList)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; streamGeometryData = map(list.__add__,stationsList,manningsCoeffList)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; streamGeometry[file] = streamGeometryData

outputCheckMannings = csv.writer(open(folderLocation + "\\" +'streamGeometry'+ str(time.gmtime().tm_sec) + '.csv', 'wb'))

list = []
for key,value in streamGeometry.items():
&amp;nbsp;&amp;nbsp;&amp;nbsp; temp = []
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; for i in range(len(value)):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp1 = []
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp1.append(key)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for item in value&lt;I&gt;:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp1.append(item)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp.append(temp1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; for items in temp:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; finalRow = []
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for item in items:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for i in item.split(","):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; finalRow.append(i)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outputCheckMannings.writerow(finalRow)

&lt;/I&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;========================================================================================&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Update:&amp;nbsp; &lt;BR /&gt;Had sort of an epiphany the other day and noticed that if you changed the prj, geometry, flow, or plan files to a text file then they are perfectly legible to read in as input cards.&amp;nbsp; Never really thought it about like this, but I guess that's how the HEC-RAS program works.&amp;nbsp; Probably just reads in these input cards, and searches for keywords to store the appropriate input values in the right variables.&lt;BR /&gt;&lt;BR /&gt;Reading input lines from a text file and storing info in different variables when keywords are flagged isn't difficult.&amp;nbsp; But the shear amount of different keywords and variables is crazy I feel.&amp;nbsp; With this is in mind, I emailed the ACOE to see if I could get their source code for reading the input files only.&amp;nbsp; No response yet.&amp;nbsp; It also crossed my mind that maybe I could file a request under the Freedom of Information Act.&amp;nbsp; I don't think I'd be able to get the "brains" of the HEC-RAS program, but I feel receiving code that reads the input files and stores it into its separate variables would be game.&lt;/BLOCKQUOTE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 10:45:04 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/exporting-extracting-hec-ras-data-using-python/m-p/220331#M17004</guid>
      <dc:creator>saurabhkulkarni</dc:creator>
      <dc:date>2021-12-11T10:45:04Z</dc:date>
    </item>
  </channel>
</rss>

