import os
import lasio
las = lasio.read(os.path.join('..', 'tests', 'examples', 'sample.las'))
we'll use this LAS file as an example:
print las._text
~VERSION INFORMATION VERS. 1.2: CWLS LOG ASCII STANDARD -VERSION 1.2 WRAP. NO: ONE LINE PER DEPTH STEP ~WELL INFORMATION BLOCK #MNEM.UNIT DATA TYPE INFORMATION #--------- ------------- ------------------------------ STRT.M 1670.000000: STOP.M 1660.000000: STEP.M -0.1250: NULL. -999.2500: COMP. COMPANY: # ANY OIL COMPANY LTD. WELL. WELL: ANY ET AL OIL WELL #12 FLD . FIELD: EDAM LOC . LOCATION: A9-16-49-20W3M PROV. PROVINCE: SASKATCHEWAN SRVC. SERVICE COMPANY: ANY LOGGING COMPANY LTD. DATE. LOG DATE: 25-DEC-1988 UWI . UNIQUE WELL ID: 100091604920W300 ~CURVE INFORMATION #MNEM.UNIT API CODE CURVE DESCRIPTION #--------- ------------- ------------------------------ DEPT.M : 1 DEPTH DT .US/M : 2 SONIC TRANSIT TIME RHOB.K/M3 : 3 BULK DENSITY NPHI.V/V : 4 NEUTRON POROSITY SFLU.OHMM : 5 RXO RESISTIVITY SFLA.OHMM : 6 SHALLOW RESISTIVITY ILM .OHMM : 7 MEDIUM RESISTIVITY ILD .OHMM : 8 DEEP RESISTIVITY ~PARAMETER INFORMATION #MNEM.UNIT VALUE DESCRIPTION #--------- ------------- ------------------------------ BHT .DEGC 35.5000: BOTTOM HOLE TEMPERATURE BS .MM 200.0000: BIT SIZE FD .K/M3 1000.0000: FLUID DENSITY MATR. 0.0000: NEUTRON MATRIX(0=LIME,1=SAND,2=DOLO) MDEN. 2710.0000: LOGGING MATRIX DENSITY RMF .OHMM 0.2160: MUD FILTRATE RESISTIVITY DFD .K/M3 1525.0000: DRILL FLUID DENSITY ~Other Note: The logging tools became stuck at 625 meters causing the data between 625 meters and 615 meters to be invalid. ~A DEPTH DT RHOB NPHI SFLU SFLA ILM ILD 1670.000 123.450 2550.000 0.450 123.450 123.450 110.200 105.600 1669.875 123.450 2550.000 0.450 123.450 123.450 110.200 105.600 1669.750 123.450 2550.000 0.450 123.450 123.450 110.200 105.600
Now use the ExcelConverter
object to produce an Excel spreadsheet:
lasio.ExcelConverter(las).write('example.xlsx')
we can import this spreadsheet back into Python directly using pandas
:
import pandas
The spreadsheet has two sheets, one called "Header" with the header information from each section:
xls_header_sheet = pandas.read_excel('example.xlsx', sheetname='Header')
xls_header_sheet
Section | Mnemonic | Unit | Value | Description | |
---|---|---|---|---|---|
0 | ~Version | VERS | NaN | 1.2 | CWLS LOG ASCII STANDARD -VERSION 1.2 |
1 | ~Version | WRAP | NaN | NO | ONE LINE PER DEPTH STEP |
2 | ~Well | STRT | M | 1670 | NaN |
3 | ~Well | STOP | M | 1660 | NaN |
4 | ~Well | STEP | M | -0.125 | NaN |
5 | ~Well | NaN | NaN | -999.25 | NaN |
6 | ~Well | COMP | NaN | # ANY OIL COMPANY LTD. | COMPANY |
7 | ~Well | WELL | NaN | ANY ET AL OIL WELL #12 | WELL |
8 | ~Well | FLD | NaN | EDAM | FIELD |
9 | ~Well | LOC | NaN | A9-16-49-20W3M | LOCATION |
10 | ~Well | PROV | NaN | SASKATCHEWAN | PROVINCE |
11 | ~Well | SRVC | NaN | ANY LOGGING COMPANY LTD. | SERVICE COMPANY |
12 | ~Well | DATE | NaN | 25-DEC-1988 | LOG DATE |
13 | ~Well | UWI | NaN | 100091604920W300 | UNIQUE WELL ID |
14 | ~Parameter | BHT | DEGC | 35.5 | BOTTOM HOLE TEMPERATURE |
15 | ~Parameter | BS | MM | 200 | BIT SIZE |
16 | ~Parameter | FD | K/M3 | 1000 | FLUID DENSITY |
17 | ~Parameter | MATR | NaN | 0 | NEUTRON MATRIX(0=LIME,1=SAND,2=DOLO) |
18 | ~Parameter | MDEN | NaN | 2710 | LOGGING MATRIX DENSITY |
19 | ~Parameter | RMF | OHMM | 0.216 | MUD FILTRATE RESISTIVITY |
20 | ~Parameter | DFD | K/M3 | 1525 | DRILL FLUID DENSITY |
and another called "Curves" containing the data itself:
xls_data_sheet = pandas.read_excel('example.xlsx', sheetname='Curves')
xls_data_sheet
DEPT | DT | RHOB | NPHI | SFLU | SFLA | ILM | ILD | |
---|---|---|---|---|---|---|---|---|
0 | 1670.000 | 123.45 | 2550 | 0.45 | 123.45 | 123.45 | 110.2 | 105.6 |
1 | 1669.875 | 123.45 | 2550 | 0.45 | 123.45 | 123.45 | 110.2 | 105.6 |
2 | 1669.750 | 123.45 | 2550 | 0.45 | 123.45 | 123.45 | 110.2 | 105.6 |
If you want to further modify the openpyxl.Workbook
object, you can access it like so:
converter = lasio.ExcelConverter(las)
type(converter.workbook)
openpyxl.workbook.workbook.Workbook
finally take a look at some screenshots of the Excel file itself: