¿Cómo cambiar el separador de campo de un archivo usando Python? -- python campo con separator campo con lidar camp Relacionados El problema

How to change the field separator of a file using Python?


2
vote

problema

Español

Soy nuevo en Python del mundo R, y estoy trabajando en archivos de texto grandes, estructurados en columnas de datos (esto es datos lidar, por lo general, 60 millones de registros).

¿Es posible cambiar el separador de campo (por ejemplo, de la pestaña delimitada a la coma delimitada) de un archivo tan grande sin tener que leer el archivo y hacer un bucle 99887776669 function Run( [string] $command, [string] $args, [Ref] [string] $stdout, [Ref] [string] $stderr ) { $p1 = New-Object System.Diagnostics.Process $p1.StartInfo = New-Object System.Diagnostics.ProcessStartInfo; $p1.StartInfo.FileName = $command $p1.StartInfo.Arguments = $arguments $p1.StartInfo.CreateNoWindow = $true $p1.StartInfo.RedirectStandardError = $true $p1.StartInfo.RedirectStandardOutput = $true $p1.StartInfo.UseShellExecute = $false $p1.Start() $p1.WaitForExit() } $p = New-Object System.Diagnostics.Process $p.StartInfo = New-Object System.Diagnostics.ProcessStartInfo; $p.StartInfo.FileName = "ping" $p.StartInfo.Arguments = "142.553.22242.2" $p.StartInfo.CreateNoWindow = $true $p.StartInfo.RedirectStandardError = $true $p.StartInfo.RedirectStandardOutput = $true $p.StartInfo.UseShellExecute = $false $p.Start() $p.WaitForExit() $code = $p.ExitCode $stderr = $p.StandardError.ReadToEnd() $stdout = $p.StandardOutput.ReadToEnd() Run("ping","208.67.222.222","","") 9 en las líneas? < / p>

Original en ingles

I'm new to Python from the R world, and I'm working on big text files, structured in data columns (this is LiDaR data, so generally 60 million + records).

Is it possible to change the field separator (eg from tab-delimited to comma-delimited) of such a big file without having to read the file and do a for loop on the lines?

        
   
   

Lista de respuestas

6
 
vote
vote
La mejor respuesta
 

no.

  • leer el archivo en
  • cambiar separadores para cada línea
  • Escribe cada línea atrás

Esto es fácilmente factible con solo unas pocas líneas de Python (no probadas, pero el enfoque general funciona):

  # Python - it's so readable, the code basically just writes itself ;-) # with open('infile') as infile:   with open('outfile', 'w') as outfile:     for line in infile:       fields = line.split(' ')       outfile.write(','.join(fields))   

No estoy familiarizado con R, pero si tiene una función de la biblioteca para esto, probablemente esté haciendo exactamente lo mismo.

Tenga en cuenta que este código solo lee una línea a la vez desde el archivo, por lo que el archivo puede ser más grande que la RAM física, nunca se carga totalmente en.

 

No.

  • Read the file in
  • Change separators for each line
  • Write each line back

This is easily doable with just a few lines of Python (not tested but the general approach works):

# Python - it's so readable, the code basically just writes itself ;-) # with open('infile') as infile:   with open('outfile', 'w') as outfile:     for line in infile:       fields = line.split('\t')       outfile.write(','.join(fields)) 

I'm not familiar with R, but if it has a library function for this it's probably doing exactly the same thing.

Note that this code only reads one line at a time from the file, so the file can be larger than the physical RAM - it's never wholly loaded in.

 
 
       
       
1
 
vote

Puede usar el comando Linux tr para reemplazar cualquier carácter con cualquier otro personaje.

 

You can use the linux tr command to replace any character with any other character.

 
 
1
 
vote

En realidad, digamos que sí, puede hacerlo sin bucles, por ejemplo:

  with open('in') as infile:   with open('out', 'w') as outfile:       map(lambda line: outfile.write(','.join(line.split(' '))), infile)   
 

Actually lets say yes, you can do it without loops eg:

with open('in') as infile:   with open('out', 'w') as outfile:       map(lambda line: outfile.write(','.join(line.split('\n'))), infile) 
 
 
         
         
0
 
vote

No puedes, pero te aconsejo firmemente que revises los generadores.

El punto es que puede hacer un programa más rápido y bien estructurado sin necesidad de escribir y almacenar datos en la memoria para procesarlo.

por ejemplo

  file = open("bigfile","w") j = (i.split(" ") for i in file) s = (","join(i) for i in j) #and now magic happens for i in s:      some_other_file.write(i)   

Este código pasa memoria para sujetar una sola línea.

 

You cant, but i strongly advise you to check generators.

Point is that you can make faster and well structured program without need to write and store data in memory in order to process it.

For instance

file = open("bigfile","w") j = (i.split("\t") for i in file) s = (","join(i) for i in j) #and now magic happens for i in s:      some_other_file.write(i) 

This code spends memory for holding only single line.

 
 
 
 

Relacionados problema

10  ¿Cuál es la forma más rápida de mapear los nombres de grupos de matriz numerable a los índices?  ( What is the fastest way to map group names of numpy array to indices ) 
Estoy trabajando con 3D PointCloud de Lido. Los puntos son dados por la matriz NUTPY que se ve así: points = np.array([[61651921, 416326074, 39805], [61605...

0  Problemas de conexión USB  ( Usb connection trouble ) 
Actualmente estoy ejecutando el proyecto de un robot utilizando un Hokuyo (URG-04lx-UG01 - http://www.hokuyo-aut.jp/02sensor/07scanner/urg_04lx_ug01.html ). ...

1  Medición de velocidad del sensor LIDAR para el sistema de frenado automático  ( Speed measurement from lidar sensor for automatic braking system ) 
Para un proyecto escolar, he estado trabajando en un sistema que se frenará automáticamente cuando haya peligro. Solo los requisitos son más estrictos (seguri...

0  Obteniendo una lectura en serie de puerto COM en un cierto período de tiempo  ( Getting a com port serial reading in a certain period of time ) 
Estoy tomando mis primeros pasos en la programación de Python. Estoy usando un LiDAR de TFMINI PLUS conectado a una computadora con Windows 7 a través de una ...

2  Extraer información descriptiva de una nube LiDAR (.las archivos)  ( Extracting descriptive information from a lidar cloud las files ) 
Tengo un archivo .Las (Datos de Lidar), ahora quería saber el tamaño de él, por ejemplo, cuánto tiempo es ancho y altura en kilómetros. ¿Cómo es posible rec...

1  ¿Extraer puntos de tierra lidar dentro del radio de la posición XY usando Python?  ( Extracting lidar ground points within radius from xy position using python ) 
Tengo la nube de puntos lidar de tierra de una sola exploración. Importé la nube de puntos (archivo .las) y creó la estructura de datos de Geopandas, incluida...

4  Paquete de malla en r [cerrado]  ( Mesh package in r ) 
cerrado. Esta pregunta no cumple con pautas de desbordamiento de pila . Actualmente no está aceptando respuestas. ...

0  C ++: forma correcta de compartir valor (datos) entre diferentes hilos  ( C proper way to share value data between different threads ) 
Tengo el siguiente hilo.cpp: while (1) { rplidar_response_measurement_node_t nodes[8192]; size_t count = _countof(nodes); o...

2  Punto flotante redondo en Liblas Python API  ( Floating point round off in liblas python api ) 
Estoy tratando de usar Liblas Python API para escribir conjuntos de datos de puntos a try{ bulls[i].draw(); }catch(e){ ...

2  Optimizar la consulta de vecinos más cercana en 70 millones de densidad de punto espacial de alta densidad en SQL Server 2008  ( Optimize nearest neighbor query on 70 million extremely high density spatial poi ) 
Tengo unos 75 millones de registros en una base de datos SQL Server 2008 R2 Express. Cada uno es un lat largo correspondiente a algún valor. La tabla tiene co...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos