Créer le fichier de Sortie avec plusieurs lignes (Python)
J'ai un fichier avec des données spécifiques, je voudrais tirer.
Le fichier ressemble à ceci:
DS User ID 1
random garbage
random garbage
DS N user name 1
random garbage
DS User ID 2
random garbage
random garbage
DS N user name 2
Pour l'instant j'ai:
import sys
import re
f = open(sys.argv[1])
strToSearch = ""
for line in f:
strToSearch += line
patFinder1 = re.compile('DS\s+\d{4}|DS\s{2}\w\s{2}\w.*|DS\s{2}N', re.MULTILINE)
for i in findPat1:
print(i)
Ma sortie à l'écran ressemble à ceci:
DS user ID 1
DS N user name 1
DS user ID 2
DS N user name 2
Si je écrire ce fichier à l'aide de:
outfile = "test.dat"
FILE = open(outfile,"a")
FILE.writelines(line)
FILE.close()
Tout est poussé à une seule ligne:
DS user ID 1DS N user name 1DS user ID 2DS N user name 2
Je peux vivre avec le premier scénario de la sortie. Idéalement si j'aimerais bande de la " DS " et "DS N' à partir du fichier de sortie et l'ont séparés par des virgules.
User ID 1,user name 1
User ID 2, username 2
Aucune idée sur la façon d'obtenir ce que c'est possible?
Salut, bienvenue sur StackOverflow. Veuillez prendre quelques minutes pour vous familiariser avec l'éditeur, en particulier le Code du bouton
Ce qui est bien évidemment pas votre véritable programme. Pour un, vous n'êtes jamais à l'aide de la regex. Il également ne pas correspondre les échantillons que vous avez fourni, au moins la plupart d'entre eux. Vous n'avez jamais définir
Veuillez décrire clairement ce que vos données d'entrée ressemble à et quels sont les critères que vous utilisez pour correspondre. À partir de vos échantillons, il semble que la recherche de lignes qui commencent par
{}
que vous pouvez utiliser pour mettre en forme le code.Ce qui est bien évidemment pas votre véritable programme. Pour un, vous n'êtes jamais à l'aide de la regex. Il également ne pas correspondre les échantillons que vous avez fourni, au moins la plupart d'entre eux. Vous n'avez jamais définir
findPat1
.Veuillez décrire clairement ce que vos données d'entrée ressemble à et quels sont les critères que vous utilisez pour correspondre. À partir de vos échantillons, il semble que la recherche de lignes qui commencent par
DS
devrait être assez - si ce n'est pas le cas, veuillez indiquer les règles. Vous semblez essayer de faire correspondre correspondant ID d'utilisateur/nom d'utilisateur entrées. Nous pouvons sûrement vous montrer une meilleure façon de le faire, si nous savons ce que vous faites.OriginalL'auteur user639302 | 2011-03-01
Vous devez vous connecter pour publier un commentaire.
Il est difficile de fournir une solution robuste sans compréhension réelle des format des données d'entrée, le degré de flexibilité est permise, et comment l'analyse des données va être utilisé.
Juste l'exemple d'entrée/sortie de données ci-dessus, on peut faire cuire rapidement un exemple de code:
Fichier de sortie sera:
Ce code peut bien sûr être beaucoup plus robuste à l'aide de regex si la spécification de format est connu. Par exemple:
Les deux exemples ci-dessus suppose que l'Utilisateur "ID X" vient toujours avant "N nom d'utilisateur X", d'où l'respectives de fuite caractères de "," et "\n".
Si la commande n'est pas spécifique, on peut stocker les valeurs dans un dictionnaire à l'aide de l'IDENTIFIANT numérique comme une clé, puis imprimer l'ID/nom de pair après tous les commentaires ont été analysés.
Si vous fournissez plus d'infos, peut-être que nous pouvons être de plus d'aide.
Excellent truc incroyablement utile explication.
OriginalL'auteur Shawn Chin
print
ajoute un caractère de saut de ligne après les arguments, maiswritelines
ne le fait pas. Donc, vous devez écrire comme:La
writelines
déclaration peut aussi être écrit comme:OriginalL'auteur Jan Hudec
ne pas ajouter de ligne de séparateurs.
Viens de faire:
Ou:
OriginalL'auteur stderr
EDIT:
remplacé
avec
OriginalL'auteur eyquem