J'ai un csv avec les valeurs suivantes. Dans le fichier csv, il n'y a pas d'en-tête. J'ai le code comme:
import pysftp
import os
import pandas as pd
# Accept any host key (still wrong see below)
cnopts = pysftp.CnOpts()
cnopts.hostkeys=None
# And authenticate with private key
sftp = pysftp.Connection(
host="test.sftp.net", username="test", password="test123", cnopts=cnopts) #private_key=".ppk",
# Temporary change directory
sftp.cwd('/delivery_files/')
# Get latest file
latest = 0
latestfile = None
for fileattr in sftp.listdir_attr():
if fileattr.filename.startswith('Report_') and fileattr.st_mtime > latest:
latest = fileattr.st_mtime
latestfile = fileattr.filename
if latestfile is not None:
sftp.get(latestfile, latestfile)
df = pd.read_csv(latestfile, header=None)
df.rename(columns={0: '1', 1: '2', 2: '3', 3: '4', 4: 'MID', 5: 'DID', 6: '7', inplace = True)
my_filtered_csv = pd.read_csv (latestfile, usecols=[4,5])
my_filtered_csv.to_csv('E:\Test\my_filtered_csv.csv', header=["MID", "DID"], index=False)
# Closes the connection
sftp.close()
# Prints out the directories and files, line by line
#print latestfile
print my_filtered_csv
Puisque le script recherche le dernier fichier dans un dossier spécifique, j'appelle latestfile. Voici ce qui s'affiche lorsque j'effectue une fonction d'impression. Lorsque j'appelle la fonction pour sortir le fichier dans un autre csv et ajouter des en-têtes, la ligne la plus haute est supprimée. Y a-t-il quelque chose de supplémentaire que je dois ajouter pour avoir la ligne la plus élevée en sortie? Voici le code de sortie:
7619623 Y8G029224 0 7619627 Y1G029224 1 7619629 35200
my_filtered_csv.to_csv('E:\Test\my_filtered_csv.csv', header=["MID", "DID"], index=False)
Voici le code:
df = pd.read_csv(latestfile, header=None)
3 Réponses :
Votre code devrait fonctionner.
pd.read_csv('E:\Test\my_filtered_csv.csv', header=None) -vous potentiellement le fichier csv que vous venez d'enregistrer avec la commande pd.read_csv('E:\Test\my_filtered_csv.csv', header=None) ?
Si tel est le cas, lorsque vous réutilisez header=None , le nouvel en-tête ne s'affiche pas lorsque vous rouvrez le DataFrame.
Vos données montrent que la première ligne - 7619623 Y8G029224 - n'est pas des données puisque la deuxième ligne a l'index 0, la troisième ligne a l'index 1. Ainsi, la sortie n'ignore aucune donnée. Le seul problème est donc de savoir quelle est la première ligne de l'impression. Nous pouvons essayer de le comprendre pour vous si vous collez du code.
La première ligne concerne les données. Ce sont les mêmes informations de rapport qui sont indiquées par 0 et 1.
J'ai ajouté header = None dans cette ligne, et cela semble fonctionner maintenant.
my_filtered_csv = pd.read_csv (dernier fichier, en-tête = Aucun, usecols = [4,5])
7619623 Y8G029224 0 7619627 Y1G029224 1 7619629 35200