Ejemplo de archivo csv:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
nuevo archivo csv que quiero:
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
Nota: quiero tabulación entre cada número.
1
recorres el archivo en iteración, en cada séptima línea lista (usa el mod 7), escribe en el archivo.
- Joe Ferndz
27/03/2021 a las 21:01
Adición al comentario de @JoeFerndz: Necesitas to aplicar algún formato de línea adicional para obtener el resultado deseado.
- alberto
27/03/2021 a las 21:04
3
Bienvenido a Stack Overflow. Lea cómo hacer buenas preguntas. Asegúrese de que su pregunta cubra estos 3 elementos: 1. Planteamiento del problema 2. Su código (debe ser un ejemplo mínimo y reproducible 3. Mensaje de error (preferiblemente seguimiento completo para ayudar a otros a revisar y proporcionar comentarios). A veces, es posible que la misma pregunta ya se haya formulado preguntó. Asegúratetu pregunta no está duplicada
- Joe Ferndz
27/03/2021 a las 21:05
¿Qué has probado hasta ahora? Stackoverflow no es una plataforma de escritura de código. Sin embargo, si proporciona un fragmento de código de muestra que nos muestre dónde está atascado, estaremos encantados de ayudarle.
- alberto
27/03/2021 a las 21:05
Investigue la "fragmentación".
- Poda
27/03/2021 a las 21:21
------------------------------------
Esto se puede hacer en pandas:
import pandas as pd
df = pd.read_csv('filename.csv', header=None)
df = pd.DataFrame(df.values.reshape(-1, 7))
df.to_csv("output.csv", sep="\t", header=False)
salida df:
0
1
2
3
4
5
6
0
1
2
3
4
5
6
7
1
8
9
10
11
12
13
14
2
15
dieciséis
17
18
19
20
21
1
Genial!!! pandas es una solución buena y rápida para esto
– Joe Fernández
27/03/2021 a las 21:28
------------------------------------
file = open("yourFile.csv", "r")
newFile = open("newFile.csv", "w")
for line in file.read().strip().split("\n"):
newFile.write(line)
if (int(line) % 7 == 0):
newFile.write("\n")
else:
newFile.write("\t")
file.close()
newFile.close()
2
1
No debes considerar el valor del archivo sino los números de fila. Así que utilice enumerar en lugar de calcular basándose en líneas
- Joe Ferndz
27/03/2021 a las 21:12
1
Dado que la operación de E/S es más costosa, intente minimizar la operación de E/S y use la memoria para almacenar los datos temporales (escriba una vez cada 7 filas leídas en lugar de escribir cada vez)
- Joe Ferndz
27/03/2021 a las 21:27
------------------------------------
Hubiera preferido que mostraras tu trabajo primero antes de publicar la respuesta.
Aquí está la respuesta de todos modos, por lo que le brinda algunos consejos para resolver este problema.
with open('abc.txt', 'r') as f1, open ('xyz.txt','w') as f2:
write_line = ''
for i, line in enumerate(f1):
line = line.strip()
if i != 0 and i %7 == 0:
write_line += '\n'
f2.write(write_line)
write_line = line + '\t'
else:
write_line += line + '\t'
if i != 0 and i %7 != 0:
f2.write(write_line)
Realice un seguimiento de la fila que lee. Si la fila es la primera (i==0), simplemente agregue la línea + \t a una variable temporal. Si la línea esel 8/15/... (i%7 ==0), entonces ya has leído 7 filas. Entonces escriba los datos en el archivo de salida. Luego restablece la variable temporal para que puedas hacer esto nuevamente.
Una vez que esté fuera del bucle, asegúrese de escribir el último conjunto de filas. A veces el archivo puede acabar teniendo 20 filas. Por lo tanto, debes asegurarte de escribir las últimas 6 filas en el archivo de salida.
El resultado de esto será:
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
Si el archivo de entrada tuviera valores del 1 al 24, el archivo de salida tendría este aspecto:
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24