如何在不删除分隔符的情况下拆分字符串?
假设我有一个字符串:
var string = "abcdeabcde";
当我这样做时
var newstring = string.split("d"),我得到这样的东西:
["abc","eabc","e"]
但我想得到这个:
["abc","d","eabc","d","e"]
当我尝试做我的"split2"功能时,我把所有纠结在splice()和索引以及"this"vs"that"和...... aargh!救命!:d
我正在尝试将CSV文件加载到Hive表中,如下所示:
CREATE TABLE mytable
(
num1 INT,
text1 STRING,
num2 INT,
text2 STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ",";
LOAD DATA LOCAL INPATH '/data.csv'
OVERWRITE INTO TABLE mytable;
Run Code Online (Sandbox Code Playgroud)
csv由逗号(,)分隔,如下所示:
1, "some text, with comma in it", 123, "more text"
Run Code Online (Sandbox Code Playgroud)
这将返回损坏的数据,因为第一个字符串中有一个','.
有没有办法设置文本分隔符或让Hive忽略字符串中的','?
我无法更改csv的分隔符,因为它是从外部源中提取的.
我想导入两种CSV文件,有些使用";" 用于分隔符和其他人使用",".到目前为止,我一直在接下来的两行之间切换:
reader=csv.reader(f,delimiter=';')
Run Code Online (Sandbox Code Playgroud)
要么
reader=csv.reader(f,delimiter=',')
Run Code Online (Sandbox Code Playgroud)
是否有可能不指定分隔符并让程序检查正确的分隔符?
下面的解决方案(Blender和sharth)似乎适用于以逗号分隔的文件(使用Libroffice生成),但不适用于以分号分隔的文件(使用MS Office生成).以下是一个以分号分隔的文件的第一行:
ReleveAnnee;ReleveMois;NoOrdre;TitreRMC;AdopCSRegleVote;AdopCSAbs;AdoptCSContre;NoCELEX;ProposAnnee;ProposChrono;ProposOrigine;NoUniqueAnnee;NoUniqueType;NoUniqueChrono;PropoSplittee;Suite2LecturePE;Council PATH;Notes
1999;1;1;1999/83/EC: Council Decision of 18 January 1999 authorising the Kingdom of Denmark to apply or to continue to apply reductions in, or exemptions from, excise duties on certain mineral oils used for specific purposes, in accordance with the procedure provided for in Article 8(4) of Directive 92/81/EEC;U;;;31999D0083;1998;577;COM;NULL;CS;NULL;;;;Propos* are missing on Celex document
1999;1;2;1999/81/EC: Council Decision of 18 January 1999 authorising the Kingdom of Spain to apply a measure derogating from …Run Code Online (Sandbox Code Playgroud) 我有以下数据:
1||1||Abdul-Jabbar||Karim||1996||1974
Run Code Online (Sandbox Code Playgroud)
我想划分令牌.
这里的分隔符是"||".
我的分隔符设置器是:
public void setDelimiter(String delimiter) {
char[] c = delimiter.toCharArray();
this.delimiter = "\"" + "\\" + c[0] + "\\" + c[1] + "\"";
System.out.println("Delimiter string is: " + this.delimiter);
}
Run Code Online (Sandbox Code Playgroud)
然而,
String[] tokens = line.split(delimiter);
Run Code Online (Sandbox Code Playgroud)
没有给出所需的结果.
我已经重定向"cin"来从文件流中读取cin.rdbug(inF.rdbug())
当我使用提取操作符时,它会读取它直到它到达空格字符.
是否可以使用另一个分隔符?我在cplusplus.com上浏览了api,但没有找到任何东西.
我想迭代一个文件列表,而不关心文件名可能包含哪些字符,所以我使用一个由空字符分隔的列表.代码将更好地解释事情.
# Set IFS to the null character to hopefully change the for..in
# delimiter from the space character (sadly does not appear to work).
IFS=$'\0'
# Get null delimited list of files
filelist="`find /some/path -type f -print0`"
# Iterate through list of files
for file in $filelist ; do
# Arbitrary operations on $file here
done
Run Code Online (Sandbox Code Playgroud)
从文件读取时,以下代码有效,但我需要从包含文本的变量中读取.
while read -d $'\0' line ; do
# Code here
done < /path/to/inputfile
Run Code Online (Sandbox Code Playgroud) 我有一个格式为"key1 = value1; key2 = value2; key3 = value3;"的字符串
我需要将其转换为上述键值对的字典.
最好的方法是什么?谢谢.
明文db文件的最佳分隔符/分隔符是什么?
我考虑过使用|,,,<TAB>,;,等但他们似乎都可能打破时,附近的项目有足够的特殊字符.
那么,有经验的数据库用户,你建议使用哪些分隔符?
我有一些文字(有意义的文字或算术表达),我想把它分成文字.
如果我有一个分隔符,我会使用:
std::stringstream stringStream(inputString);
std::string word;
while(std::getline(stringStream, word, delimiter))
{
wordVector.push_back(word);
}
Run Code Online (Sandbox Code Playgroud)
如何将字符串分成具有多个分隔符的标记?
我有一个日志文件中的格式化字符串,如下所示:
>>> a="test result"
Run Code Online (Sandbox Code Playgroud)
也就是说,测试和结果被一些空格分开 - 它可能是使用格式化的字符串创建的,它给出了test一些恒定的间距.
简单拆分不会起作用:
>>> a.split(" ")
['test', '', '', '', ... '', '', '', '', '', '', '', '', '', '', '', 'result']
Run Code Online (Sandbox Code Playgroud)
split(DELIMITER, COUNT) 清除一些不必要的值:
>>> a.split(" ",1)
['test', ' result']
Run Code Online (Sandbox Code Playgroud)
这有帮助 - 但当然,我真的需要:
['test', 'result']
Run Code Online (Sandbox Code Playgroud)
我可以使用split()后跟map+ strip(),但我想知道是否有更多的Pythonic方法来做到这一点.
谢谢,
亚当
更新:这么简单的解决方案!谢谢你们.