1

I have a txt file containing 2 columns that are not ordered:

1 0.1
4 0.5
3 0.2

To order it for plotting, i found that i could that i could open the file and use zip function such as :

    data=np.loadtxt(file)
    x=data[:, 0]
    y = data[:, 1]
    x, y = zip(*sorted(zip(x, y)))

It works well but it doesn't actually modify the file and make the replacement to get the final output :

1 0.1
3 0.2
4 0.5
Joooeey
  • 3,394
  • 1
  • 35
  • 49
  • Does this answer your question? [Correct way to write line to file?](https://stackoverflow.com/questions/6159900/correct-way-to-write-line-to-file) – Moritz Hartmann Aug 03 '22 at 13:18
  • numpy has a function for writing text files: https://numpy.org/doc/stable/reference/generated/numpy.savetxt.html – Joooeey Aug 03 '22 at 13:19
  • In order to modify a file, you must write the data to the file. It also looks, from you desired output, that all you really need to do is sort the data on the first column. Not sure why you need the ```zip``` function. – itprorh66 Aug 03 '22 at 13:21
  • i have a function f(x) so if i need to sort x columns in order and the y values changes according to the sorting of x. – haswellrefresh3 Aug 03 '22 at 13:23

1 Answers1

1
import pandas as pd
data = pd.read_csv("data.txt", sep=' ', header=None)
data.sort_values(by=0).to_csv('data.txt', index=False, header=False, sep=' ')

or with lovely polars (similar to pandas but faster:)):

import polars as pl
data = pl.read_csv("data.txt", sep=' ', has_header=False)
data.sort(by="column_1").write_csv('data.txt', has_header=False, sep=' ')
MoRe
  • 2,296
  • 2
  • 3
  • 23