rows_from_file() splits a single-column CSV file on a letter, or raises csv.Error

Ouverte Adaptée aux débutants
#907 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 3 jours

@L4XB y travaille déjà.

Depuis le 17/10/2026.

  • #908 par @L4XB — ouverte

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
84/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
python, sqlite
Domaine
cli, data

Piste de recherche

Repérez rows_from_file() et reproduisez les cas de fichiers CSV à une seule colonne avec les commandes sqlite-utils memory indiquées dans l’issue. Vérifiez comment la détection du séparateur est effectuée, puis exécutez les tests existants concernés et ajoutez une couverture pour les entrées CSV à une seule colonne avec des en-têtes et des URL. Le travail est terminé lorsque les fichiers sans séparateur reconnu sont importés comme une seule colonne, tandis que le comportement de insert --sniff reste inchangé.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

When rows_from_file() detects the format of a single-column CSV file, it either fails or splits the column on a letter. That affects sqlite-utils memory file.csv and any Python call that leaves format= unset.

$ printf 'name\nAnn\nBob\n' > names.csv
$ sqlite-utils memory names.csv "select * from names"
...
_csv.Error: Could not determine delimiter

$ printf 'url\nhttps://example.com/a\nhttps://example.org/b\n' > urls.csv
$ sqlite-utils memory urls.csv "select * from urls"
[{"ur": "https://examp", "": "e.com/a"},
 {"ur": "https://examp", "": "e.org/b"}]

(sqlite-utils 4.2.1)

The detection calls csv.Sniffer().sniff() on the first 2048 bytes without a delimiters= list. The sniffer then treats any character as a candidate, so a file with a single column either has no consistent candidate (csv.Error) or has a letter that happens to repeat the same number of times on every line (l above).

A fix could sniff only for the delimiters a CSV file is realistically written with (,, ;, tab, |) and read the file as one column when none of them is found. insert --sniff calls the sniffer the same way, but that is an explicit request to detect the dialect, so I would leave it unchanged.

Langage dominant
Python
Étoiles
2.2k
Forks
215
Métriques de merge des PR
Aucune PR mergée en 30 j

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de simonw/sqlite-utils

Toutes les issues de simonw/sqlite-utils

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.